อ่าน 5 นาที
การประมวลผลคำสั่งแบบไปป์ไลน์
ใน วิศวกรรมคอมพิวเตอร์ การ ประมวล ผลแบบไปป์ไลน์คำสั่ง เป็นเทคนิคสำหรับการนำ การประมวลผลแบบขนานระดับคำสั่งมา ใช้ภายในโปรเซสเซอร์ตัวเดียว...
การประมวลผลคำสั่งแบบไปป์ไลน์
วงจรนาฬิกา หมายเลขเครื่องมือ | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 1 | ถ้า | รหัสประจำตัว | อดีต | เมม | ดับเบิลยูบี | ||
| 2 | ถ้า | รหัสประจำตัว | อดีต | เมม | ดับเบิลยูบี | ||
| 3 | ถ้า | รหัสประจำตัว | อดีต | เมม | ดับเบิลยูบี | ||
| 4 | ถ้า | รหัสประจำตัว | อดีต | เมม | |||
| 5 | ถ้า | รหัสประจำตัว | อดีต | ||||
| (IF = ดึงคำสั่ง, ID = ถอดรหัสคำสั่ง, EX = ดำเนินการ, MEM = การเข้าถึงหน่วยความจำ, WB = เขียนกลับไปยังรีจิสเตอร์) ในรอบสัญญาณนาฬิกาที่สี่ (คอลัมน์สีเขียว) คำสั่งแรกสุดอยู่ในขั้นตอน MEM และคำสั่งล่าสุดยังไม่ได้เข้าสู่ไปป์ไลน์ | |||||||
ในวิศวกรรมคอมพิวเตอร์ การ ประมวลผลแบบไปป์ไลน์คำสั่งเป็นเทคนิคสำหรับการนำการประมวลผลแบบขนานระดับคำสั่งมาใช้ภายในโปรเซสเซอร์ตัวเดียว การประมวลผลแบบไปป์ไลน์พยายามทำให้ทุกส่วนของโปรเซสเซอร์ทำงานอย่างต่อเนื่องด้วยคำสั่งใดคำสั่งหนึ่ง โดยการแบ่งคำสั่ง ที่เข้ามาออก เป็นขั้นตอนต่อเนื่อง (ซึ่งเรียกว่า " ไปป์ไลน์ ") ที่ดำเนินการโดยหน่วยประมวลผล ต่างๆ โดยแต่ละส่วนของคำสั่งจะถูกประมวลผลแบบขนาน
แนวคิดและแรงจูงใจ
ในคอมพิวเตอร์แบบไปป์ไลน์ คำสั่งต่างๆ จะเดินทางผ่านหน่วยประมวลผลกลาง (CPU) เป็นขั้นตอน ตัวอย่างเช่น อาจมีหนึ่งขั้นตอนสำหรับแต่ละขั้นตอนของวัฏจักรฟอน นอยมันน์ได้แก่ การดึงคำสั่ง การดึงตัวถูกดำเนินการ การดำเนินการตามคำสั่ง และการเขียนผลลัพธ์ คอมพิวเตอร์แบบไปป์ไลน์มักจะมี "รีจิสเตอร์ไปป์ไลน์" อยู่หลังแต่ละขั้นตอน รีจิสเตอร์เหล่านี้จะเก็บข้อมูลจากคำสั่งและการคำนวณ เพื่อให้เกตตรรกะของขั้นตอนถัดไปสามารถดำเนินการในขั้นตอนต่อไปได้
การจัดเรียงแบบนี้ทำให้ CPU สามารถประมวลผลคำสั่งได้ในแต่ละรอบสัญญาณนาฬิกา โดยทั่วไปแล้ว ขั้นตอนที่มีหมายเลขคู่จะทำงานที่ขอบด้านหนึ่งของสัญญาณนาฬิกาแบบคลื่นสี่เหลี่ยม ในขณะที่ขั้นตอนที่มีหมายเลขคี่จะทำงานที่ขอบอีกด้านหนึ่ง วิธีนี้ช่วยให้CPU มีประสิทธิภาพในการประมวลผล สูง กว่าคอมพิวเตอร์แบบหลายรอบสัญญาณนาฬิกาที่อัตราความเร็วสัญญาณนาฬิกา เดียวกัน แต่ก็อาจทำให้เกิดความหน่วง เพิ่มขึ้น เนื่องจากค่าใช้จ่ายเพิ่มเติมของกระบวนการไปป์ไลน์เอง นอกจากนี้ แม้ว่าตรรกะอิเล็กทรอนิกส์จะมีขีดจำกัดความเร็วสูงสุดที่คงที่ แต่คอมพิวเตอร์แบบไปป์ไลน์ก็สามารถทำให้เร็วขึ้นหรือช้าลงได้โดยการปรับจำนวนขั้นตอนในไปป์ไลน์ ยิ่งมีจำนวนขั้นตอนมากขึ้น แต่ละขั้นตอนก็จะทำงานน้อยลง ดังนั้นขั้นตอนจึงมีความล่าช้าจากเกตตรรกะ น้อยลง และสามารถทำงานที่อัตราความเร็วสัญญาณนาฬิกาที่สูงขึ้นได้
คอมพิวเตอร์แบบไปป์ไลน์มักประหยัดที่สุด เมื่อวัดต้นทุนเป็นจำนวนเกตตรรกะต่อคำสั่งต่อวินาที ในแต่ละขณะ คำสั่งจะอยู่ในขั้นตอนไปป์ไลน์เพียงขั้นตอนเดียว และโดยเฉลี่ยแล้ว ขั้นตอนไปป์ไลน์มีต้นทุนต่ำกว่าคอมพิวเตอร์แบบมัลติไซเคิล นอกจากนี้ เมื่อออกแบบได้ดี ตรรกะส่วนใหญ่ของคอมพิวเตอร์แบบไปป์ไลน์จะถูกใช้งานอยู่ตลอดเวลา ในทางตรงกันข้าม คอมพิวเตอร์แบบไม่เรียงลำดับมักมีตรรกะที่ไม่ได้ใช้งานจำนวนมากในแต่ละขณะ การคำนวณที่คล้ายกันมักแสดงให้เห็นว่าคอมพิวเตอร์แบบไปป์ไลน์ใช้พลังงานน้อยกว่าต่อคำสั่ง
อย่างไรก็ตาม คอมพิวเตอร์แบบไปป์ไลน์มักซับซ้อนและมีราคาแพงกว่าคอมพิวเตอร์แบบมัลติไซเคิลที่เทียบเท่ากัน โดยทั่วไปจะมีเกตตรรกะ รีจิสเตอร์ และหน่วยควบคุมที่ซับซ้อนกว่า ในทำนองเดียวกัน อาจใช้พลังงานโดยรวมมากกว่า ในขณะที่ใช้พลังงานต่อคำสั่งน้อยกว่า ซีพียูแบบประมวลผลไม่เรียงลำดับมักสามารถประมวลผลคำสั่งได้มากกว่าต่อวินาที เนื่องจากสามารถประมวลผลหลายคำสั่งพร้อมกันได้
ในคอมพิวเตอร์แบบไปป์ไลน์ หน่วยควบคุมจะจัดการให้การไหลของข้อมูลเริ่มต้น ดำเนินต่อไป และหยุดลงตามคำสั่งของโปรแกรม โดยปกติแล้วข้อมูลคำสั่งจะถูกส่งผ่านในรีจิสเตอร์ไปป์ไลน์จากขั้นตอนหนึ่งไปยังอีกขั้นตอนหนึ่ง โดยมีส่วนของตรรกะควบคุมที่แยกออกจากกันในแต่ละขั้นตอน หน่วยควบคุมยังรับประกันว่าคำสั่งในแต่ละขั้นตอนจะไม่ส่งผลเสียต่อการทำงานของคำสั่งในขั้นตอนอื่นๆ ตัวอย่างเช่น หากสองขั้นตอนต้องใช้ข้อมูลชิ้นเดียวกัน ตรรกะควบคุมจะรับประกันว่าการใช้งานนั้นทำในลำดับที่ถูกต้อง
เมื่อทำงานอย่างมีประสิทธิภาพ คอมพิวเตอร์แบบไปป์ไลน์จะมีคำสั่งอยู่ในแต่ละขั้นตอน จากนั้นจะประมวลผลคำสั่งเหล่านั้นทั้งหมดพร้อมกัน โดยสามารถประมวลผลคำสั่งได้ประมาณหนึ่งคำสั่งต่อรอบการทำงานของนาฬิกา แต่เมื่อโปรแกรมเปลี่ยนไปใช้ลำดับคำสั่งอื่น ไปป์ไลน์บางครั้งต้องทิ้งข้อมูลที่กำลังประมวลผลอยู่และเริ่มต้นใหม่ ซึ่งเรียกว่า "การหยุดชะงัก" (stall)
การออกแบบคอมพิวเตอร์แบบไปป์ไลน์ส่วนใหญ่ช่วยป้องกันการรบกวนระหว่างขั้นตอนต่างๆ และลดการหยุดชะงัก
จำนวนขั้นบันได
จำนวนขั้นตอนที่ขึ้นอยู่กันจะแตกต่างกันไปตามสถาปัตยกรรมของเครื่อง ตัวอย่างเช่น:
- โครงการ IBM Stretchในช่วงปี 1956–61 ได้เสนอคำศัพท์ Fetch, Decode และ Execute ซึ่งกลายมาใช้กันอย่างแพร่หลายในปัจจุบัน
- ไปป์ไลน์ RISC แบบคลาสสิกประกอบด้วย:
- การดึงคำสั่ง
- ถอดรหัสคำสั่งและดึงข้อมูลรีจิสเตอร์
- ดำเนินการ
- การเข้าถึงหน่วยความจำ
- ลงทะเบียนเขียนกลับ
- ไมโครคอนโทรลเลอร์ Atmel AVR และ PICต่างก็มีไปป์ไลน์สองขั้นตอน
- การออกแบบหลายแบบมีไปป์ไลน์ที่มีความยาวถึง 7, 10 และแม้กระทั่ง 20 ขั้นตอน (เช่นในIntel Pentium 4 )
- คอร์ NetBurst รุ่น "Prescott" และ "Cedar Mill" จาก Intel ซึ่งใช้ในรุ่น Pentium 4 รุ่นสุดท้าย รวมถึงรุ่นPentium DและXeonที่พัฒนาต่อยอดมาจาก Pentium 4 นั้น มีไปป์ไลน์ยาวถึง 31 สเตจ
- โปรเซสเซอร์เครือข่าย Xelerated X10q มีไปป์ไลน์ที่มีความยาวมากกว่าหนึ่งพันขั้นตอน แม้ว่าในกรณีนี้ 200 ขั้นตอนจะแสดงถึง CPU อิสระที่มีคำสั่งที่ตั้งโปรแกรมไว้เป็นรายบุคคลก็ตาม ขั้นตอนที่เหลือใช้เพื่อประสานการเข้าถึงหน่วยความจำและหน่วยฟังก์ชันบนชิป[ 1 ] [ 2 ]
เมื่อสร้างไปป์ไลน์ให้ "ลึก" ขึ้น (โดยมีขั้นตอนที่ขึ้นอยู่กันมากขึ้น) ขั้นตอนหนึ่งๆ สามารถนำไปใช้ได้ด้วยวงจรที่ง่ายกว่า ซึ่งอาจทำให้นาฬิกาของโปรเซสเซอร์ทำงานได้เร็วขึ้น[ 3 ]ไปป์ไลน์ดังกล่าวอาจเรียกว่าซูเปอร์ไปป์ไลน์[ 4 ]
กล่าวได้ว่าโปรเซสเซอร์ทำงานแบบไปป์ไลน์อย่างสมบูรณ์ (fully pipelined)หากสามารถดึงคำสั่งได้ในทุกรอบการทำงาน ดังนั้น หากคำสั่งหรือเงื่อนไขบางอย่างต้องการความล่าช้าที่ขัดขวางการดึงคำสั่งใหม่ โปรเซสเซอร์นั้นก็จะไม่ทำงานแบบไปป์ไลน์อย่างสมบูรณ์
ประวัติศาสตร์
การใช้ pipelining ที่สำคัญเกิดขึ้นใน โครงการ ILLIAC IIและ โครงการ IBM Stretchแม้ว่าจะมีการใช้เวอร์ชันที่เรียบง่ายกว่าในZ1ในปี 1939 และZ3ในปี 1941 ก็ตาม [ 5 ]
การประมวลผลแบบไปป์ไลน์เริ่มต้นอย่างจริงจังในช่วงปลายทศวรรษ 1970 ในซูเปอร์คอมพิวเตอร์เช่น โปรเซสเซอร์เวกเตอร์และโปรเซสเซอร์อาร์เรย์ หนึ่งในซูเปอร์คอมพิวเตอร์รุ่นแรกๆ คือซีรี่ส์ Cyber ที่สร้างโดย Control Data Corporation สถาปนิกหลักคือSeymour Crayซึ่งต่อมาได้เป็นหัวหน้าของ Cray Research Cray ได้พัฒนาซูเปอร์คอมพิวเตอร์ตระกูล XMP โดยใช้การประมวลผลแบบไปป์ไลน์สำหรับทั้งฟังก์ชันการคูณและการบวก/ลบ ต่อมา Star Technologies ได้เพิ่มการประมวลผลแบบขนาน (ฟังก์ชันไปป์ไลน์หลายฟังก์ชันทำงานพร้อมกัน) ซึ่งพัฒนาโดย Roger Chen ในปี 1984 Star Technologies ได้เพิ่มวงจรการหารแบบไปป์ไลน์ที่พัฒนาโดย James Bradley
การประมวลผลแบบไปป์ไลน์ไม่ได้จำกัดอยู่เฉพาะซูเปอร์คอมพิวเตอร์เท่านั้น ในปี พ.ศ. 2519 เมนเฟรมอเนกประสงค์ซีรีส์ 470 ของบริษัท Amdahl มีการประมวลผลแบบไปป์ไลน์ 7 ขั้นตอน และวงจรทำนายสาขาที่ได้รับการจดสิทธิบัตร องค์ประกอบสำคัญในปรัชญาการออกแบบ RISC [ 6 ]ในช่วงกลางทศวรรษ พ.ศ. 2523 การประมวลผลแบบไปป์ไลน์ยังถูกนำมาใช้ในสถาปัตยกรรม CISC แบบดั้งเดิมโดยนักพัฒนาอีกด้วย[ 7 ]
อันตราย
แบบจำลองการประมวลผลแบบลำดับนั้นถือว่าคำสั่งแต่ละคำสั่งจะเสร็จสมบูรณ์ก่อนที่คำสั่งถัดไปจะเริ่มต้น ซึ่งข้อสมมตินี้ไม่เป็นจริงในโปรเซสเซอร์แบบไปป์ไลน์ สถานการณ์ที่ผลลัพธ์ที่คาดหวังมีปัญหาเรียกว่าอันตราย (hazard ) ลองจินตนาการถึงคำสั่งรีจิสเตอร์สองคำสั่งต่อไปนี้สำหรับโปรเซสเซอร์สมมุติ:
1: เพิ่ม 1 ให้กับ R5 2: คัดลอก R5 ไปยัง R6
หากโปรเซสเซอร์มี 5 ขั้นตอนตามที่แสดงในภาพประกอบเริ่มต้น ('ไปป์ไลน์ห้าขั้นตอนพื้นฐาน' ในตอนต้นของบทความ) คำสั่งที่ 1 จะถูกดึงมาในเวลาt1 และการประมวลผลจะเสร็จสมบูรณ์ในเวลาt5คำสั่งที่ 2 จะถูกดึงมาในเวลาt2 และจะเสร็จสมบูรณ์ในเวลาt6คำสั่งแรกอาจจะฝากค่าที่เพิ่มขึ้นลงใน R5 ในขั้นตอนที่ห้า (การเขียนค่ากลับเข้ารีจิสเตอร์) ในเวลาt5แต่คำสั่งที่สองอาจจะดึงค่าจาก R5 (เพื่อคัดลอกไปยัง R6) ในขั้นตอนที่สอง (การถอดรหัสคำสั่งและการดึงค่าจากรีจิสเตอร์) ในเวลาt3 ดูเหมือน ว่าคำสั่งแรกจะยังไม่ได้เพิ่มค่าในเวลา นั้นโค้ดข้างต้นก่อให้เกิดอันตราย
การเขียนโปรแกรมคอมพิวเตอร์ด้วย ภาษา คอมไพล์อาจไม่ก่อให้เกิดข้อกังวลเหล่านี้ เนื่องจากคอมไพเลอร์ได้รับการออกแบบให้สร้างรหัสเครื่องที่หลีกเลี่ยงอันตรายได้
วิธีแก้ปัญหาเฉพาะหน้า
ในโปรเซสเซอร์ DSP และ RISC รุ่นแรกๆ บางรุ่น เอกสารประกอบแนะนำให้โปรแกรมเมอร์หลีกเลี่ยงการพึ่งพาซึ่งกันและกันในคำสั่งที่อยู่ติดกันหรือใกล้เคียงกัน (เรียกว่าช่องหน่วงเวลา ) หรือระบุว่าคำสั่งที่สองใช้ค่าเก่าแทนค่าที่ต้องการ (ในตัวอย่างข้างต้น โปรเซสเซอร์อาจคัดลอกค่าที่ยังไม่ได้เพิ่มขึ้นอย่างไม่เป็นไปตามที่คาดหวัง) หรือระบุว่าค่าที่ใช้เป็นค่าที่ไม่กำหนด โปรแกรมเมอร์อาจมีงานอื่นที่ไม่เกี่ยวข้องซึ่งโปรเซสเซอร์สามารถทำได้ในระหว่างนั้น หรือเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง โปรแกรมเมอร์อาจแทรกคำสั่ง NOPลงในโค้ด ซึ่งจะลดข้อดีของการประมวลผลแบบไปป์ไลน์ลงบางส่วน
โซลูชัน
โดยทั่วไปแล้ว โปรเซสเซอร์แบบไปป์ไลน์จะใช้เทคนิคสามอย่างเพื่อให้ทำงานได้ตามที่คาดหวัง เมื่อโปรแกรมเมอร์สันนิษฐานว่าแต่ละคำสั่งจะเสร็จสมบูรณ์ก่อนที่คำสั่งถัดไปจะเริ่มต้น:
- กระบวนการประมวลผลอาจหยุดชะงักหรือหยุดการกำหนดตารางคำสั่งใหม่จนกว่าจะได้รับค่าที่ต้องการ ส่งผลให้เกิดช่องว่างในไปป์ไลน์ หรือ"ฟองอากาศ"ซึ่งไม่มีการทำงานใดๆ เกิดขึ้น
- สามารถเพิ่มเส้นทางข้อมูลเพิ่มเติมที่ส่งค่าที่คำนวณแล้วไปยังคำสั่งในอนาคตที่อื่นในไปป์ไลน์ก่อนที่คำสั่งที่สร้างค่าดังกล่าวจะเสร็จสิ้นสมบูรณ์ ซึ่งเป็นกระบวนการที่เรียกว่าการส่งต่อตัวดำเนินการ[ 8 ] [ 9 ]
- โปรเซสเซอร์สามารถค้นหาคำสั่งอื่นๆ ที่ไม่ขึ้นอยู่กับคำสั่งปัจจุบัน และสามารถดำเนินการได้ทันทีโดยไม่มีความเสี่ยง ซึ่งเป็นการเพิ่มประสิทธิภาพที่เรียกว่าการดำเนินการนอกลำดับ (out-of-order execution )
สาขา
การแยกสาขาออกจากลำดับคำสั่งปกติมักก่อให้เกิดอันตราย เว้นแต่ว่าโปรเซสเซอร์จะสามารถดำเนินการตามสาขานั้นได้ภายในรอบเวลาเดียว มิเช่นนั้นไปป์ไลน์จะยังคงดึงคำสั่งตามลำดับต่อไป คำสั่งดังกล่าวไม่สามารถดำเนินการได้เนื่องจากโปรแกรมเมอร์ได้เบี่ยงเบนการควบคุมไปยังส่วนอื่นของโปรแกรมแล้ว
การแยกสาขาแบบมีเงื่อนไขยิ่งสร้างปัญหามากขึ้นไปอีก โปรเซสเซอร์อาจจะแยกสาขาหรือไม่ก็ได้ ขึ้นอยู่กับการคำนวณที่ยังไม่เกิดขึ้น โปรเซสเซอร์ต่างๆ อาจหยุดทำงาน อาจพยายามทำนายการแยกสาขาและอาจสามารถเริ่มดำเนินการลำดับโปรแกรมที่แตกต่างกันสองลำดับ ( การดำเนินการแบบเร่งรีบ ) โดยแต่ละลำดับจะถือว่ามีการแยกสาขาหรือไม่ และละทิ้งงานทั้งหมดที่เกี่ยวข้องกับการคาดเดาที่ไม่ถูกต้อง[ a ]
โปรเซสเซอร์ที่มีการใช้งานการคาดการณ์การแตกแขนง (branch prediction) ซึ่งโดยปกติแล้วจะคาดการณ์ได้อย่างถูกต้อง จะช่วยลดผลกระทบต่อประสิทธิภาพการทำงานจากการแตกแขนงได้ อย่างไรก็ตาม หากการคาดการณ์การแตกแขนงทำได้ไม่ดี อาจทำให้โปรเซสเซอร์ต้องทำงานมากขึ้น เช่นการล้างเส้นทางการทำงานของโค้ดที่ไม่ถูกต้องซึ่งเริ่มทำงานไปแล้วออกจากไปป์ไลน์ก่อนที่จะกลับมาทำงานต่อในตำแหน่งที่ถูกต้อง
โปรแกรมที่เขียนขึ้นสำหรับโปรเซสเซอร์แบบไปป์ไลน์จะหลีกเลี่ยงการใช้คำสั่งกระโดดโดยเจตนา เพื่อลดการสูญเสียความเร็วที่อาจเกิดขึ้น ตัวอย่างเช่น โปรแกรมเมอร์สามารถจัดการกรณีปกติด้วยการประมวลผลแบบลำดับ และกระโดดเฉพาะเมื่อตรวจพบกรณีที่ผิดปกติเท่านั้น การใช้โปรแกรมเช่นgcovเพื่อวิเคราะห์ความครอบคลุมของโค้ดช่วยให้โปรแกรมเมอร์สามารถวัดได้ว่าคำสั่งกระโดดแต่ละคำสั่งถูกเรียกใช้งานบ่อยแค่ไหน และได้รับข้อมูลเชิงลึกเพื่อปรับปรุงโค้ดให้เหมาะสมยิ่งขึ้น ในบางกรณี โปรแกรมเมอร์สามารถจัดการทั้งกรณีปกติและกรณีที่ผิดปกติได้ด้วยโค้ด ที่ไม่ใช้คำสั่งกระโดด
สถานการณ์พิเศษ
- โปรแกรมปรับเปลี่ยนตัวเอง
- เทคนิคการเขียนโค้ดที่แก้ไขตัวเองได้อาจก่อให้เกิดปัญหาในโปรเซสเซอร์แบบไปป์ไลน์ ในเทคนิคนี้ หนึ่งในผลกระทบของโปรแกรมคือการแก้ไขคำสั่งที่จะตามมา หากโปรเซสเซอร์มีแคชคำสั่ง คำสั่งดั้งเดิมอาจถูกคัดลอกไปยังคิวอินพุตแบบพรีเฟตช์แล้วและการแก้ไขจะไม่ส่งผล โปรเซสเซอร์บางตัว เช่นZilog Z280สามารถกำหนดค่าหน่วยความจำแคชบนชิปสำหรับการดึงข้อมูลอย่างเดียว หรือเป็นส่วนหนึ่งของพื้นที่แอดเดรสหน่วยความจำปกติ และหลีกเลี่ยงปัญหาดังกล่าวเกี่ยวกับคำสั่งที่แก้ไขตัวเองได้
- คำสั่งที่ไม่สามารถขัดจังหวะได้
- คำสั่งบางคำสั่งอาจไม่สามารถขัดจังหวะได้เพื่อให้มั่นใจถึงความเป็นอะตอมิกเช่น เมื่อคำสั่งนั้นสลับตำแหน่งของสองรายการ โปรเซสเซอร์แบบลำดับจะอนุญาตให้มีการขัดจังหวะระหว่างคำสั่ง แต่โปรเซสเซอร์แบบไปป์ไลน์จะซ้อนทับคำสั่ง ดังนั้นการประมวลผลคำสั่งที่ไม่สามารถขัดจังหวะได้จะทำให้ส่วนต่างๆ ของคำสั่งปกติไม่สามารถขัดจังหวะได้เช่นกันบั๊ก Cyrix comaจะ ทำให้ระบบแกนเดี่ยว หยุดทำงานโดยใช้ลูปอนันต์ซึ่งมีคำสั่งที่ไม่สามารถขัดจังหวะได้อยู่ในไปป์ไลน์ตลอดเวลา
ข้อควรพิจารณาในการออกแบบ
- ความเร็ว
- การประมวลผลแบบไปป์ไลน์ช่วยให้ทุกส่วนของโปรเซสเซอร์ทำงานได้อย่างต่อเนื่องและเพิ่มปริมาณงานที่มีประโยชน์ที่โปรเซสเซอร์สามารถทำได้ในเวลาที่กำหนด โดยทั่วไปแล้ว การประมวลผลแบบไปป์ไลน์จะช่วยลดเวลาการทำงานของโปรเซสเซอร์และเพิ่มปริมาณการประมวลผลคำสั่ง อย่างไรก็ตาม ข้อได้เปรียบด้านความเร็วจะลดลงหากการประมวลผลพบกับอุปสรรคที่ทำให้การประมวลผลช้าลงกว่าอัตราที่เหมาะสม โปรเซสเซอร์ที่ไม่ใช้ไปป์ไลน์จะประมวลผลคำสั่งเพียงครั้งละหนึ่งคำสั่งเท่านั้น การเริ่มต้นของคำสั่งถัดไปจะล่าช้าออกไปโดยไม่มีเงื่อนไข ไม่ใช่เพราะอุปสรรค
- โปรเซสเซอร์แบบไปป์ไลน์จำเป็นต้องจัดระเบียบงานทั้งหมดออกเป็นขั้นตอนย่อย ซึ่งอาจต้องมีการทำสำเนาของรีจิสเตอร์ ส่งผลให้ความหน่วงของคำสั่งบางคำสั่งเพิ่มขึ้น
- เศรษฐกิจ
- ด้วยการทำให้แต่ละขั้นตอนย่อยง่ายขึ้น การประมวลผลแบบไปป์ไลน์จึงช่วยให้การดำเนินการที่ซับซ้อนทำได้อย่างประหยัดกว่าการเพิ่มวงจรที่ซับซ้อน เช่น สำหรับการคำนวณเชิงตัวเลข อย่างไรก็ตาม โปรเซสเซอร์ที่ไม่ได้มุ่งเน้นการเพิ่มความเร็วด้วยการประมวลผลแบบไปป์ไลน์ อาจมีโครงสร้างที่เรียบง่ายกว่าและต้นทุนการผลิตที่ถูกกว่า
- ความสามารถในการคาดการณ์
- เมื่อเปรียบเทียบกับสภาพแวดล้อมที่โปรแกรมเมอร์ต้องหลีกเลี่ยงหรือแก้ไขปัญหาที่เกิดจากความเสี่ยง การใช้โปรเซสเซอร์แบบไม่ใช้ไปป์ไลน์อาจทำให้การเขียนโปรแกรมและการฝึกอบรมโปรแกรมเมอร์ง่ายขึ้น นอกจากนี้ โปรเซสเซอร์แบบไม่ใช้ไปป์ไลน์ยังช่วยให้คาดการณ์จังหวะเวลาที่แน่นอนของลำดับคำสั่งได้ง่ายขึ้นด้วย
ตัวอย่างประกอบภาพ
ทางด้านขวาคือไปป์ไลน์ทั่วไปที่มีสี่ขั้นตอน ได้แก่ การดึงข้อมูล การถอดรหัส การประมวลผล และการเขียนกลับ กล่องสีเทาด้านบนคือรายการคำสั่งที่รอการประมวลผล กล่องสีเทาด้านล่างคือรายการคำสั่งที่ประมวลผลเสร็จแล้ว และกล่องสีขาวตรงกลางคือไปป์ไลน์
ขั้นตอนการดำเนินการมีดังนี้:

| นาฬิกา | การประหารชีวิต |
|---|---|
| 0 |
|
| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
|
ฟองสบู่ท่อส่ง

โปรเซสเซอร์แบบไปป์ไลน์อาจจัดการกับอันตรายโดยการหยุดชะงักและสร้างฟองอากาศในไปป์ไลน์ ส่งผลให้เกิดรอบการทำงานหนึ่งรอบหรือมากกว่านั้นที่ไม่มีอะไรที่เป็นประโยชน์เกิดขึ้น
ในภาพประกอบด้านขวา ในรอบการทำงานที่ 3 โปรเซสเซอร์ไม่สามารถถอดรหัสคำสั่งสีม่วงได้ อาจเป็นเพราะโปรเซสเซอร์พิจารณาว่าการถอดรหัสขึ้นอยู่กับผลลัพธ์ที่ได้จากการดำเนินการคำสั่งสีเขียว คำสั่งสีเขียวสามารถดำเนินการต่อไปยังขั้นตอนการดำเนินการ (Execute) และจากนั้นไปยังขั้นตอนการเขียนกลับ (Write-back) ได้ตามกำหนด แต่คำสั่งสีม่วงจะหยุดชะงักเป็นเวลาหนึ่งรอบการทำงานในขั้นตอนการดึงข้อมูล (Fetch) คำสั่งสีน้ำเงินซึ่งควรจะถูกดึงข้อมูลในรอบการทำงานที่ 3 ก็หยุดชะงักเป็นเวลาหนึ่งรอบการทำงานเช่นกัน เช่นเดียวกับคำสั่งสีแดงที่อยู่ถัดไป
เนื่องจากมีฟองอากาศ (วงรีสีฟ้าในภาพประกอบ) วงจรถอดรหัสของโปรเซสเซอร์จึงไม่ได้ทำงานในช่วงรอบที่ 3 วงจรประมวลผลไม่ได้ทำงานในช่วงรอบที่ 4 และวงจรเขียนกลับไม่ได้ทำงานในช่วงรอบที่ 5
เมื่อฟองเคลื่อนออกจากไปป์ไลน์ (ในรอบที่ 6) การทำงานปกติจะกลับมาดำเนินต่อ แต่ทุกอย่างจะล่าช้าไปหนึ่งรอบ จะต้องใช้เวลา 8 รอบ (รอบที่ 1 ถึง 8) แทนที่จะเป็น 7 รอบในการดำเนินการคำสั่งทั้งสี่ที่แสดงด้วยสีให้เสร็จสมบูรณ์[ b ]
ดูเพิ่มเติม
หมายเหตุ
- ^โปรเซสเซอร์แบบไปป์ไลน์รุ่นแรกๆ ที่ไม่มีฮิวริสติกส์เหล่านี้ เช่น โปรเซสเซอร์ PA-RISCของ Hewlett-Packardจัดการกับอันตรายโดยการแจ้งเตือนโปรแกรมเมอร์เท่านั้น ในกรณีนี้คือ คำสั่งหนึ่งคำสั่งหรือมากกว่านั้นที่ตามหลังการกระโดดจะถูกดำเนินการไม่ว่าการกระโดดนั้นจะเกิดขึ้นหรือไม่ก็ตาม ซึ่งอาจมีประโยชน์ ตัวอย่างเช่น หลังจากคำนวณตัวเลขในรีจิสเตอร์แล้ว การกระโดดแบบมีเงื่อนไขอาจตามด้วยการโหลดค่าที่เป็นประโยชน์มากกว่าสำหรับการคำนวณในภายหลังลงในรีจิสเตอร์ ทั้งในกรณีที่มีการกระโดดและไม่มีการกระโดด
- ^อย่างไรก็ตาม โปรดทราบว่า แม้จะมีฟองอากาศเกิดขึ้น โปรเซสเซอร์ก็ยังสามารถประมวลผลลำดับคำสั่งได้เร็วกว่าโปรเซสเซอร์ที่ไม่ใช้ไปป์ไลน์อย่างมาก อย่างน้อยก็ในกรณีนี้
ลิงก์ภายนอก
- การทำนายสาขาในตระกูล Pentium ( สำเนาจาก Archive.org )
- บทความจาก ArsTechnica เกี่ยวกับการวางท่อ
- สถาปัตยกรรมโปรเซสเซอร์ไปป์ไลน์แบบไหลสวนทาง
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การประมวลผลคำสั่งแบบไปป์ไลน์
ใน วิศวกรรมคอมพิวเตอร์ การ ประมวล ผลแบบไปป์ไลน์คำสั่ง เป็นเทคนิคสำหรับการนำ การประมวลผลแบบขนานระดับคำสั่งมา ใช้ภายในโปรเซสเซอร์ตัวเดียว...
แนวคิดและแรงจูงใจ
ในคอมพิวเตอร์แบบไปป์ไลน์ คำสั่งต่างๆ จะเดินทางผ่าน หน่วยประมวลผลกลาง (CPU) เป็นขั้นตอน ตัวอย่างเช่น อาจมีหนึ่งขั้นตอนสำหรับแต่ละขั้นตอนของ วัฏจักรฟอน นอยมันน์ ได้แก่ การดึงคำสั่ง การดึงตัวถูกดำเนินการ การดำเนินการตามคำสั่ง และการเขียนผลลัพธ์...
จำนวนขั้นบันได
จำนวนขั้นตอนที่ขึ้นอยู่กันจะแตกต่างกันไปตามสถาปัตยกรรมของเครื่อง ตัวอย่างเช่น:
ประวัติศาสตร์
การใช้ pipelining ที่สำคัญเกิดขึ้นใน โครงการ ILLIAC II และ โครงการ IBM Stretch แม้ว่าจะมีการใช้เวอร์ชันที่เรียบง่ายกว่าใน Z1 ในปี 1939 และ Z3 ในปี 1941 ก็ตาม [ 5 ]