แน่นอนว่ามีการตรวจสอบสภาพทุกครั้ง แต่เมื่อถึงเวลาที่ตรวจสอบแล้วมันจะอยู่ไกลไปจนถึงซีพียูของท่อ ในเวลาเฉลี่ยคำแนะนำอื่น ๆ ก็เข้าสู่ขั้นตอนต่าง ๆ และอยู่ในขั้นตอนต่าง ๆ ของการดำเนินการ
โดยปกติแล้วเงื่อนไขจะถูกตามด้วยคำสั่งสาขาตามเงื่อนไขทันทีซึ่งทั้งสองสาขาหากเงื่อนไขประเมินเป็น TRUE หรืออยู่ภายใต้เงื่อนไขที่ประเมินเป็น FALSE ซึ่งหมายความว่ามีสองสตรีมของคำสั่งต่าง ๆ ซึ่งอาจโหลดลงในไปป์ไลน์หลังจากคำสั่งเงื่อนไขและคำสั่งสาขาขึ้นอยู่กับว่าเงื่อนไขประเมินเป็น TRUE หรือ FALSE น่าเสียดายที่ทันทีหลังจากโหลดคำสั่งเงื่อนไขและคำสั่งสาขาซีพียูยังไม่รู้ว่าจะประเมินเงื่อนไขอย่างไร แต่ก็ยังคงต้องโหลดสิ่งต่าง ๆ ลงในไปป์ไลน์ ดังนั้นจึงเลือกหนึ่งในสองชุดคำสั่งตามการคาดเดาว่าเงื่อนไขจะประเมินเป็นอย่างไร
ต่อมาเมื่อคำสั่งเงื่อนไขเดินทางไปป์ไลน์มันเป็นเวลาของการประเมิน ในเวลานั้นซีพียูค้นพบว่าการเดานั้นถูกหรือผิด
หากการเดานั้นถูกต้องสาขาจะไปยังสถานที่ที่ถูกต้องและคำแนะนำที่ถูกต้องถูกโหลดลงในไปป์ไลน์ หากปรากฎว่าการเดาผิดคำแนะนำทั้งหมดที่โหลดลงในไปป์ไลน์หลังจากคำสั่งสาขาแบบมีเงื่อนไขผิดพวกเขาจำเป็นต้องทิ้งและการดึงคำแนะนำต้องเริ่มต้นใหม่จากที่ที่ถูกต้อง
การแก้ไข
เพื่อตอบสนองต่อความคิดเห็นของ StarWeaver เพื่อให้ทราบถึงสิ่งที่ CPU ต้องทำเพื่อดำเนินการคำสั่งเดียว:
ลองคิดอะไรง่าย ๆ อย่างMOV AX,[SI+10]
ที่เราคิดว่า "โหลดขวานพร้อมกับคำที่ SI บวก 10" CPU จะต้อง:
- ปล่อยเนื้อหาของพีซี ("โปรแกรมเคาน์เตอร์ลงทะเบียน") ไปยังที่อยู่บัส
- อ่าน opcode คำแนะนำจาก data บัส;
- พีซีที่เพิ่มขึ้น;
- ถอดรหัส opcode เพื่อคิดว่าจะทำอย่างไรกับมัน
- ปล่อยเนื้อหาของพีซีไปยังบัสแอดเดรส
- อ่านตัวถูกดำเนินการคำสั่ง (ในกรณีนี้ 10) จากบัสข้อมูล
- พีซีที่เพิ่มขึ้น;
- ป้อนตัวถูกดำเนินการและ SI ไปยัง adder
- ปล่อยผลลัพธ์ของ adder ไปยังแอดเดรสบัส
- อ่าน AX จากดาต้าบัส
นี่คือ 10 ขั้นตอนมาก บางขั้นตอนเหล่านี้จะได้รับการปรับให้เหมาะสมแม้ในซีพียูที่ไม่ใช่ pipelined ตัวอย่างเช่น CPU จะเพิ่มพีซีเกือบตลอดเวลาควบคู่ไปกับขั้นตอนต่อไปซึ่งเป็นเรื่องง่ายที่จะทำเพราะพีซีเป็นระบบลงทะเบียนที่พิเศษมาก ไม่เคยใช้สำหรับงานอื่นดังนั้นจึงไม่มีความเป็นไปได้ในการแย่งชิงระหว่างส่วนต่าง ๆ ของ CPU สำหรับการเข้าถึงการลงทะเบียนนี้ แต่ถึงกระนั้นเราก็เหลือ 8 ขั้นตอนสำหรับการเรียนการสอนที่เรียบง่ายและโปรดทราบว่าฉันได้สมมติระดับความซับซ้อนในนามของซีพียูแล้วตัวอย่างเช่นฉันสมมติว่าไม่จำเป็นต้องมีขั้นตอนพิเศษทั้งหมดสำหรับ บวกกับการดำเนินการเพิ่มเติมก่อนที่จะสามารถอ่านผลลัพธ์ได้
ตอนนี้ให้พิจารณาว่ามีโหมดการกำหนดแอดเดรสที่ซับซ้อนเช่นMOV AX, [DX+SI*4+10]
และคำแนะนำที่ซับซ้อนยิ่งขึ้นเช่นเดียวกับMUL AX, operand
ที่ใช้ลูปภายใน CPU เพื่อคำนวณผลลัพธ์
ดังนั้นจุดของฉันที่นี่คือคำอุปมา "ระดับอะตอม" นั้นไม่เหมาะสมสำหรับระดับการเรียนการสอนของ CPU อาจเหมาะสำหรับระดับขั้นตอนไปป์ไลน์หากคุณไม่ต้องการลงไปจนถึงระดับประตูตรรกะจริงเกินไป