กลับไปหน้าบทความ

อ่าน 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 แบบคลาสสิกประกอบด้วย:
    1. การดึงคำสั่ง
    2. ถอดรหัสคำสั่งและดึงข้อมูลรีจิสเตอร์
    3. ดำเนินการ
    4. การเข้าถึงหน่วยความจำ
    5. ลงทะเบียนเขียนกลับ
  • ไมโครคอนโทรลเลอร์ 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จะ ทำให้ระบบแกนเดี่ยว หยุดทำงานโดยใช้ลูปอนันต์ซึ่งมีคำสั่งที่ไม่สามารถขัดจังหวะได้อยู่ในไปป์ไลน์ตลอดเวลา

ข้อควรพิจารณาในการออกแบบ

ความเร็ว
การประมวลผลแบบไปป์ไลน์ช่วยให้ทุกส่วนของโปรเซสเซอร์ทำงานได้อย่างต่อเนื่องและเพิ่มปริมาณงานที่มีประโยชน์ที่โปรเซสเซอร์สามารถทำได้ในเวลาที่กำหนด โดยทั่วไปแล้ว การประมวลผลแบบไปป์ไลน์จะช่วยลดเวลาการทำงานของโปรเซสเซอร์และเพิ่มปริมาณการประมวลผลคำสั่ง อย่างไรก็ตาม ข้อได้เปรียบด้านความเร็วจะลดลงหากการประมวลผลพบกับอุปสรรคที่ทำให้การประมวลผลช้าลงกว่าอัตราที่เหมาะสม โปรเซสเซอร์ที่ไม่ใช้ไปป์ไลน์จะประมวลผลคำสั่งเพียงครั้งละหนึ่งคำสั่งเท่านั้น การเริ่มต้นของคำสั่งถัดไปจะล่าช้าออกไปโดยไม่มีเงื่อนไข ไม่ใช่เพราะอุปสรรค
โปรเซสเซอร์แบบไปป์ไลน์จำเป็นต้องจัดระเบียบงานทั้งหมดออกเป็นขั้นตอนย่อย ซึ่งอาจต้องมีการทำสำเนาของรีจิสเตอร์ ส่งผลให้ความหน่วงของคำสั่งบางคำสั่งเพิ่มขึ้น
เศรษฐกิจ
ด้วยการทำให้แต่ละขั้นตอนย่อยง่ายขึ้น การประมวลผลแบบไปป์ไลน์จึงช่วยให้การดำเนินการที่ซับซ้อนทำได้อย่างประหยัดกว่าการเพิ่มวงจรที่ซับซ้อน เช่น สำหรับการคำนวณเชิงตัวเลข อย่างไรก็ตาม โปรเซสเซอร์ที่ไม่ได้มุ่งเน้นการเพิ่มความเร็วด้วยการประมวลผลแบบไปป์ไลน์ อาจมีโครงสร้างที่เรียบง่ายกว่าและต้นทุนการผลิตที่ถูกกว่า
ความสามารถในการคาดการณ์
เมื่อเปรียบเทียบกับสภาพแวดล้อมที่โปรแกรมเมอร์ต้องหลีกเลี่ยงหรือแก้ไขปัญหาที่เกิดจากความเสี่ยง การใช้โปรเซสเซอร์แบบไม่ใช้ไปป์ไลน์อาจทำให้การเขียนโปรแกรมและการฝึกอบรมโปรแกรมเมอร์ง่ายขึ้น นอกจากนี้ โปรเซสเซอร์แบบไม่ใช้ไปป์ไลน์ยังช่วยให้คาดการณ์จังหวะเวลาที่แน่นอนของลำดับคำสั่งได้ง่ายขึ้นด้วย

ตัวอย่างประกอบภาพ

ทางด้านขวาคือไปป์ไลน์ทั่วไปที่มีสี่ขั้นตอน ได้แก่ การดึงข้อมูล การถอดรหัส การประมวลผล และการเขียนกลับ กล่องสีเทาด้านบนคือรายการคำสั่งที่รอการประมวลผล กล่องสีเทาด้านล่างคือรายการคำสั่งที่ประมวลผลเสร็จแล้ว และกล่องสีขาวตรงกลางคือไปป์ไลน์

ขั้นตอนการดำเนินการมีดังนี้:

ไปป์ไลน์ทั่วไป 4 ขั้นตอน; กล่องสีแสดงถึงคำสั่งที่แยกจากกัน
นาฬิกาการประหารชีวิต
0
  • มีคำสั่งสี่คำสั่งที่รอการดำเนินการ
1
  • คำสั่งสีเขียวถูกดึงมาจากหน่วยความจำ
2
  • คำสั่งสีเขียวได้รับการถอดรหัสแล้ว
  • คำสั่งสีม่วงถูกดึงมาจากหน่วยความจำ
3
  • คำสั่งสีเขียวได้รับการดำเนินการแล้ว (มีการดำเนินการจริง)
  • คำสั่งสีม่วงได้รับการถอดรหัสแล้ว
  • คำสั่งสีน้ำเงินถูกดึงมาแล้ว
4
  • ผลลัพธ์ของคำสั่งสีเขียวจะถูกเขียนกลับไปยังไฟล์รีจิสเตอร์หรือหน่วยความจำ
  • คำสั่งสีม่วงถูกดำเนินการแล้ว
  • คำสั่งสีน้ำเงินได้รับการถอดรหัสแล้ว
  • คำสั่งสีแดงถูกดึงมาแล้ว
5
  • การดำเนินการตามคำสั่งสีเขียวเสร็จสมบูรณ์แล้ว
  • คำแนะนำสีม่วงถูกเขียนกลับเข้าไป
  • คำสั่งสีน้ำเงินถูกดำเนินการแล้ว
  • คำสั่งสีแดงได้รับการถอดรหัสแล้ว
6
  • การดำเนินการตามคำสั่งสีม่วงเสร็จสมบูรณ์แล้ว
  • คำแนะนำสีน้ำเงินถูกเขียนกลับเข้าไป
  • คำสั่งสีแดงถูกดำเนินการแล้ว
7
  • การดำเนินการตามคำสั่งสีน้ำเงินเสร็จสมบูรณ์แล้ว
  • คำแนะนำสีแดงถูกเขียนกลับเข้าไป
8
  • การดำเนินการตามคำสั่งสีแดงเสร็จสมบูรณ์แล้ว
9
  • การดำเนินการตามคำสั่งทั้งสี่เสร็จสมบูรณ์แล้ว

ฟองสบู่ท่อส่ง

ฟองอากาศในรอบที่ 3 ทำให้การดำเนินการล่าช้า

โปรเซสเซอร์แบบไปป์ไลน์อาจจัดการกับอันตรายโดยการหยุดชะงักและสร้างฟองอากาศในไปป์ไลน์ ส่งผลให้เกิดรอบการทำงานหนึ่งรอบหรือมากกว่านั้นที่ไม่มีอะไรที่เป็นประโยชน์เกิดขึ้น

ในภาพประกอบด้านขวา ในรอบการทำงานที่ 3 โปรเซสเซอร์ไม่สามารถถอดรหัสคำสั่งสีม่วงได้ อาจเป็นเพราะโปรเซสเซอร์พิจารณาว่าการถอดรหัสขึ้นอยู่กับผลลัพธ์ที่ได้จากการดำเนินการคำสั่งสีเขียว คำสั่งสีเขียวสามารถดำเนินการต่อไปยังขั้นตอนการดำเนินการ (Execute) และจากนั้นไปยังขั้นตอนการเขียนกลับ (Write-back) ได้ตามกำหนด แต่คำสั่งสีม่วงจะหยุดชะงักเป็นเวลาหนึ่งรอบการทำงานในขั้นตอนการดึงข้อมูล (Fetch) คำสั่งสีน้ำเงินซึ่งควรจะถูกดึงข้อมูลในรอบการทำงานที่ 3 ก็หยุดชะงักเป็นเวลาหนึ่งรอบการทำงานเช่นกัน เช่นเดียวกับคำสั่งสีแดงที่อยู่ถัดไป

เนื่องจากมีฟองอากาศ (วงรีสีฟ้าในภาพประกอบ) วงจรถอดรหัสของโปรเซสเซอร์จึงไม่ได้ทำงานในช่วงรอบที่ 3 วงจรประมวลผลไม่ได้ทำงานในช่วงรอบที่ 4 และวงจรเขียนกลับไม่ได้ทำงานในช่วงรอบที่ 5

เมื่อฟองเคลื่อนออกจากไปป์ไลน์ (ในรอบที่ 6) การทำงานปกติจะกลับมาดำเนินต่อ แต่ทุกอย่างจะล่าช้าไปหนึ่งรอบ จะต้องใช้เวลา 8 รอบ (รอบที่ 1 ถึง 8) แทนที่จะเป็น 7 รอบในการดำเนินการคำสั่งทั้งสี่ที่แสดงด้วยสีให้เสร็จสมบูรณ์[ b ]

ดูเพิ่มเติม

หมายเหตุ

  1. ^โปรเซสเซอร์แบบไปป์ไลน์รุ่นแรกๆ ที่ไม่มีฮิวริสติกส์เหล่านี้ เช่น โปรเซสเซอร์ PA-RISCของ Hewlett-Packardจัดการกับอันตรายโดยการแจ้งเตือนโปรแกรมเมอร์เท่านั้น ในกรณีนี้คือ คำสั่งหนึ่งคำสั่งหรือมากกว่านั้นที่ตามหลังการกระโดดจะถูกดำเนินการไม่ว่าการกระโดดนั้นจะเกิดขึ้นหรือไม่ก็ตาม ซึ่งอาจมีประโยชน์ ตัวอย่างเช่น หลังจากคำนวณตัวเลขในรีจิสเตอร์แล้ว การกระโดดแบบมีเงื่อนไขอาจตามด้วยการโหลดค่าที่เป็นประโยชน์มากกว่าสำหรับการคำนวณในภายหลังลงในรีจิสเตอร์ ทั้งในกรณีที่มีการกระโดดและไม่มีการกระโดด
  2. ^อย่างไรก็ตาม โปรดทราบว่า แม้จะมีฟองอากาศเกิดขึ้น โปรเซสเซอร์ก็ยังสามารถประมวลผลลำดับคำสั่งได้เร็วกว่าโปรเซสเซอร์ที่ไม่ใช้ไปป์ไลน์อย่างมาก อย่างน้อยก็ในกรณีนี้
  • การทำนายสาขาในตระกูล Pentium ( สำเนาจาก Archive.org )
  • บทความจาก ArsTechnica เกี่ยวกับการวางท่อ
  • สถาปัตยกรรมโปรเซสเซอร์ไปป์ไลน์แบบไหลสวนทาง
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Instruction_pipelining&oldid=1338173111 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การประมวลผลคำสั่งแบบไปป์ไลน์

ใน วิศวกรรมคอมพิวเตอร์ การ ประมวล ผลแบบไปป์ไลน์คำสั่ง เป็นเทคนิคสำหรับการนำ การประมวลผลแบบขนานระดับคำสั่งมา ใช้ภายในโปรเซสเซอร์ตัวเดียว...

แนวคิดและแรงจูงใจ

ในคอมพิวเตอร์แบบไปป์ไลน์ คำสั่งต่างๆ จะเดินทางผ่าน หน่วยประมวลผลกลาง (CPU) เป็นขั้นตอน ตัวอย่างเช่น อาจมีหนึ่งขั้นตอนสำหรับแต่ละขั้นตอนของ วัฏจักรฟอน นอยมันน์ ได้แก่ การดึงคำสั่ง การดึงตัวถูกดำเนินการ การดำเนินการตามคำสั่ง และการเขียนผลลัพธ์...

จำนวนขั้นบันได

จำนวนขั้นตอนที่ขึ้นอยู่กันจะแตกต่างกันไปตามสถาปัตยกรรมของเครื่อง ตัวอย่างเช่น:

ประวัติศาสตร์

การใช้ pipelining ที่สำคัญเกิดขึ้นใน โครงการ ILLIAC II และ โครงการ IBM Stretch แม้ว่าจะมีการใช้เวอร์ชันที่เรียบง่ายกว่าใน Z1 ในปี 1939 และ Z3 ในปี 1941 ก็ตาม [ 5 ]