ไปป์ไลน์และภาวะเสี่ยง
การทำไปป์ไลน์เป็นการซ้อนทับการประมวลผลคำสั่งที่ต่อเนื่องกันโดยแบ่งการประมวลผลคำสั่งออกเป็นหลายขั้นตอน ซึ่งช่วยเพิ่มปริมาณงาน ภาวะเสี่ยงคือสถานการณ์ต่างๆ เช่น ความขัดแย้งด้านทรัพยากร การพึ่งพาข้อมูล และการแตกแขนง ซึ่งขัดขวางไม่ให้คำสั่งถัดไปดำเนินการในรอบถัดไป
Definition
การทำไปป์ไลน์เป็นเทคนิคที่ซ้อนทับการประมวลผลคำสั่งหลายคำสั่งโดยแบ่งการประมวลผลออกเป็นขั้นตอนตามลำดับ และภาวะเสี่ยงคือเงื่อนไขใดๆ ที่บังคับให้ขั้นตอนต้องหยุดชะงักเนื่องจากไม่สามารถดำเนินการได้อย่างถูกต้องในรอบนาฬิกาถัดไป
Scope
หัวข้อนี้ครอบคลุมไปป์ไลน์คำสั่งแบบคลาสสิกและภาวะเสี่ยงสามประเภทที่จำกัดประสิทธิภาพของไปป์ไลน์ ได้แก่ ภาวะเสี่ยงเชิงโครงสร้าง (ความขัดแย้งด้านทรัพยากร) ภาวะเสี่ยงด้านข้อมูล (การพึ่งพาระหว่างคำสั่ง) และภาวะเสี่ยงด้านการควบคุม (การแตกแขนง) รวมถึงวิธีการแก้ไขมาตรฐาน เช่น การส่งต่อ/การข้าม การหยุดชะงัก และการจัดการการแตกแขนง หัวข้อนี้ไม่รวมถึงการออกคำสั่งแบบขนานขั้นสูง (การขนานระดับคำสั่ง) การคาดการณ์ทิศทางการแตกแขนงในเชิงลึก (การคาดการณ์การแตกแขนง) และการจัดลำดับใหม่แบบไดนามิก (การประมวลผลนอกลำดับ)
Core questions
- การแบ่งการประมวลผลคำสั่งออกเป็นขั้นตอนช่วยเพิ่มปริมาณงานได้อย่างไรโดยไม่ลดเวลาแฝง?
- ภาวะเสี่ยงเชิงโครงสร้าง ภาวะเสี่ยงด้านข้อมูล และภาวะเสี่ยงด้านการควบคุมคืออะไร และแต่ละประเภทเกิดจากอะไร?
- การส่งต่อช่วยแก้ไขภาวะเสี่ยงด้านข้อมูลจำนวนมากได้อย่างไรโดยไม่ต้องหยุดชะงัก?
- ค่าใช้จ่ายของการแตกแขนงในไปป์ไลน์คืออะไร และจะบรรเทาได้อย่างไร?
Key concepts
- ขั้นตอนของไปป์ไลน์ (ดึง, ถอดรหัส, ประมวลผล, หน่วยความจำ, เขียนกลับ)
- ปริมาณงานเทียบกับเวลาแฝง
- ภาวะเสี่ยงเชิงโครงสร้าง
- ภาวะเสี่ยงด้านข้อมูล
- ภาวะเสี่ยงด้านการควบคุม
- การส่งต่อและการข้าม
- การหยุดชะงักและช่องว่างของไปป์ไลน์
- ค่าปรับจากการแตกแขนง
Key theories
- ปริมาณงานและภาวะเสี่ยงของไปป์ไลน์
- ไปป์ไลน์ k-ขั้นตอนในอุดมคติจะประมวลผลคำสั่งหนึ่งคำสั่งต่อรอบหลังจากเติมเต็ม แต่ภาวะเสี่ยงเชิงโครงสร้าง ภาวะเสี่ยงด้านข้อมูล และภาวะเสี่ยงด้านการควบคุมทำให้เกิดการหยุดชะงักซึ่งลดปริมาณงานให้ต่ำกว่าอุดมคติ การออกแบบไปป์ไลน์จึงมุ่งเน้นไปที่การลดการหยุดชะงักเหล่านี้ให้เหลือน้อยที่สุด
Mechanisms
การประมวลผลคำสั่งจะถูกแบ่งออกเป็นขั้นตอน เพื่อให้ในขณะที่คำสั่งหนึ่งกำลังดำเนินการ คำสั่งอื่นๆ กำลังถูกดึงและถอดรหัส ภาวะเสี่ยงเชิงโครงสร้างเกิดขึ้นเมื่อคำสั่งสองคำสั่งต้องการทรัพยากรเดียวกัน ภาวะเสี่ยงด้านข้อมูลเกิดขึ้นเมื่อคำสั่งต้องการผลลัพธ์ที่ยังไม่ได้สร้างขึ้น ภาวะเสี่ยงด้านการควบคุมเกิดขึ้นเมื่อคำสั่งถัดไปขึ้นอยู่กับการแตกแขนงที่ยังไม่ได้รับการแก้ไข การส่งต่อจะส่งผลลัพธ์โดยตรงระหว่างขั้นตอน การหยุดชะงักจะแทรกช่องว่างเมื่อการส่งต่อไม่เพียงพอ และการจัดการการแตกแขนงจะช่วยลดผลกระทบของภาวะเสี่ยงด้านการควบคุม
Clinical relevance
การทำไปป์ไลน์เป็นเทคนิคพื้นฐานด้านประสิทธิภาพในโปรเซสเซอร์เกือบทุกชนิด และการทำความเข้าใจภาวะเสี่ยงจะอธิบายว่าเหตุใดลำดับคำสั่งและพฤติกรรมการแตกแขนงจึงส่งผลต่อความเร็ว การจัดตารางเวลาคำสั่งของคอมไพเลอร์และความตระหนักของโปรแกรมเมอร์เกี่ยวกับความสัมพันธ์และรูปแบบการแตกแขนงสามารถปรับปรุงประสิทธิภาพบนฮาร์ดแวร์แบบไปป์ไลน์ได้อย่างมาก
History
การทำไปป์ไลน์ปรากฏในเครื่องจักรประสิทธิภาพสูงยุคแรกๆ เช่น IBM Stretch และ CDC 6600 ในช่วงต้นทศวรรษ 1960 ไปป์ไลน์ห้าขั้นตอนแบบง่ายกลายเป็นแบบจำลองการสอนและการออกแบบที่เป็นที่ยอมรับในโปรเซสเซอร์ RISC ในทศวรรษ 1980 และการจำแนกภาวะเสี่ยงและวิธีการแก้ไขอย่างเป็นระบบได้รับการประมวลผลในตำราของ Hennessy-Patterson
Key figures
- John L. Hennessy
- David A. Patterson
- Seymour Cray
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- การทำไปป์ไลน์ทำให้คำสั่งเดียวทำงานเร็วขึ้นหรือไม่?
- ไม่ การทำไปป์ไลน์ไม่ได้ลดเวลาในการประมวลผลคำสั่งเดียวให้เสร็จสิ้น (เวลาแฝง) แต่จะเพิ่มจำนวนคำสั่งที่เสร็จสิ้นต่อหน่วยเวลา (ปริมาณงาน) โดยการซ้อนทับการประมวลผล คล้ายกับการที่สายการผลิตเพิ่มผลผลิตโดยไม่เร่งความเร็วของสินค้าแต่ละชิ้น
- การส่งต่อคืออะไร?
- การส่งต่อ หรือการข้าม คือการส่งผลลัพธ์ที่เพิ่งคำนวณได้โดยตรงจากขั้นตอนที่สร้างผลลัพธ์นั้นไปยังขั้นตอนถัดไปที่ต้องการผลลัพธ์นั้น แทนที่จะรอให้เขียนกลับไปยังไฟล์รีจิสเตอร์ ซึ่งช่วยแก้ไขภาวะเสี่ยงด้านข้อมูลจำนวนมากโดยไม่ต้องหยุดไปป์ไลน์