TL; DR
ท่อที่สั้นกว่าหมายถึงความเร็วสัญญาณนาฬิกาที่เร็วขึ้น แต่อาจลดปริมาณงานได้ ดูคำตอบ # 2 และ 3 ที่ด้านล่าง (พวกเขาสั้นฉันสัญญา)
รุ่นที่ยาวกว่า:
มีบางสิ่งที่ต้องพิจารณาที่นี่:
- คำแนะนำบางอย่างใช้เวลาเดียวกัน
- ไม่ใช่คำแนะนำทั้งหมดขึ้นอยู่กับสิ่งที่ทำทันที (หรือแม้กระทั่งสิบหรือยี่สิบ) คำแนะนำกลับ
ไปป์ไลน์ที่ง่ายมาก (สิ่งที่เกิดขึ้นในชิป Intel สมัยใหม่เกินกว่าความซับซ้อน) มีหลายขั้นตอน:
Fetch -> Decode -> Access Memory -> Execute -> Writeback -> การอัพเดตตัวนับโปรแกรม
ในแต่ละครั้ง -> มีค่าใช้จ่ายเวลาที่เกิดขึ้น นอกจากนี้ทุกติ๊ก (วงจรนาฬิกา) ทุกอย่างจะย้ายจากสเตจหนึ่งไปยังสเตจต่อไปดังนั้นสเตจที่ช้าที่สุดของคุณจะกลายเป็นความเร็วสำหรับสเตจทั้งหมด (จริงๆจ่ายให้พวกมันมีความยาวเท่ากันมากที่สุด)
สมมติว่าคุณมี 5 คำแนะนำและคุณต้องการที่จะดำเนินการ (รูปที่นำมาจากวิกิพีเดียที่นี่ไม่มีการอัปเดตพีซี) มันจะมีลักษณะเช่นนี้:
แม้ว่าแต่ละคำสั่งจะใช้เวลา 5 รอบนาฬิกาในการทำให้เสร็จสมบูรณ์ แต่คำสั่งที่เสร็จสมบูรณ์จะออกมาจากท่อทุกรอบ หากเวลาที่ใช้สำหรับแต่ละสเตจคือ 40 ns และ 15 ns สำหรับบิตกลาง (โดยใช้ไพพ์ไลน์สเตจหกชั้นด้านบนของฉัน) มันจะใช้เวลา 40 * 6 + 5 * 15 = 315 ns เพื่อรับคำแนะนำครั้งแรก
ในทางตรงกันข้ามถ้าฉันจะกำจัดท่อทั้งหมด (แต่เก็บทุกอย่างไว้เหมือนเดิม) มันจะใช้เวลาเพียง 240 ns เพื่อให้ได้คำสั่งแรกออกมา (ความแตกต่างของความเร็วในการรับ "คำสั่งแรก" นี้เรียกว่าเวลาแฝงโดยทั่วไปมีความสำคัญน้อยกว่าปริมาณงานซึ่งเป็นจำนวนคำสั่งต่อวินาที)
ความแตกต่างที่แท้จริงคือในตัวอย่างที่มีการวางท่อฉันได้รับคำแนะนำใหม่เสร็จแล้ว (หลังจากอันแรก) ทุกๆ 60 ns ในที่ไม่ใช่ pipelined มันใช้เวลา 240 ทุกครั้ง นี่แสดงให้เห็นว่าท่อส่งก๊าซมีความสามารถในการปรับปรุงปริมาณงานได้ดี
การก้าวไปอีกขั้นดูเหมือนว่าในระยะการเข้าถึงหน่วยความจำฉันจะต้องมีหน่วยเพิ่มเติม (เพื่อทำการคำนวณที่อยู่) นั่นหมายความว่าหากมีคำสั่งที่ไม่ได้ใช้สเตจ mem นั้นรอบนั้นฉันสามารถทำได้นอกจากนี้อีก ฉันสามารถทำสองขั้นตอนการดำเนินการ (โดยที่หนึ่งอยู่ในขั้นตอนการเข้าถึงหน่วยความจำ) ในหน่วยประมวลผลเดียวในเห็บเดียว (การตั้งเวลาเป็นฝันร้าย แต่อย่าไปที่นั่นนอกจากนี้ขั้นตอนการอัปเดตพีซีจะต้องใช้หน่วยเพิ่มเติม กรณีของการกระโดดดังนั้นฉันสามารถทำการเพิ่มสามสถานะในหนึ่งเห็บ) โดยมีไพพ์ไลน์สามารถออกแบบได้ว่าคำสั่ง (หรือมากกว่า) สองคำสั่งสามารถใช้สเตจต่าง ๆ (หรือสเตปแบบก้าวกระโดด ฯลฯ ) ประหยัดเวลาอันมีค่า
หมายเหตุว่าในการที่จะทำเช่นนี้โปรเซสเซอร์ทำมาก "วิเศษ" (การออกจากการดำเนินการสั่งซื้อ , การทำนายสาขาและมากยิ่งขึ้น) แต่นี้จะช่วยให้คำแนะนำหลาย ๆ ที่จะออกมาเร็วกว่าโดยไม่ต้องท่อ (ทราบว่าท่อที่มีมากเกินไป นานมากยากที่จะจัดการและต้องเสียค่าใช้จ่ายที่สูงขึ้นเพียงแค่รอระหว่างขั้นตอน) ด้านพลิกคือถ้าคุณทำไปป์ไลน์นานเกินไปคุณสามารถได้รับความเร็วสัญญาณนาฬิกาที่บ้า แต่สูญเสียผลประโยชน์ดั้งเดิมมาก (จากการมีตรรกะชนิดเดียวกันที่มีอยู่ในหลาย ๆ สถานที่และใช้ในเวลาเดียวกัน )
คำตอบ # 2:
โปรเซสเซอร์SIMD (คำสั่งเดียวหลายข้อมูล) (เช่น GPU ส่วนใหญ่) ทำงานหลายอย่างกับข้อมูลจำนวนมาก แต่ใช้เวลานานกว่า การอ่านค่าทั้งหมดจะใช้เวลานานขึ้น (หมายถึงนาฬิกาช้าลงแม้ว่าสิ่งนี้จะชดเชยด้วยการมีรถบัสที่กว้างขึ้นในระดับหนึ่ง) แต่คุณสามารถเรียนรู้คำสั่งได้มากขึ้นในแต่ละครั้ง (คำแนะนำที่มีประสิทธิภาพมากขึ้นต่อรอบ)
คำตอบ # 3:
เนื่องจากคุณสามารถ "โกง" การนับวงจรที่ยาวขึ้นเพื่อให้คุณสามารถทำสองคำสั่งทุกรอบ (เพียงลดความเร็วนาฬิกาลงครึ่งหนึ่ง) นอกจากนี้ยังเป็นไปได้ที่จะทำอะไรบางอย่างทุก ๆ สองเห็บแทนที่จะเป็นหนึ่ง (ให้ความเร็วนาฬิกา 2x แต่ไม่เปลี่ยนคำแนะนำในวินาที)