ความแตกต่างระหว่าง In-order และ Out-of-order Execution บน CPU

ความแตกต่างระหว่าง In-order และ Out-of-order Execution บน CPU

โปรเซสเซอร์ตัวแรกที่มีการดำเนินการนอกคำสั่งคือ IBM POWER 1 ซึ่งจะเป็นพื้นฐานสำหรับโปรเซสเซอร์ RISC ที่มีชื่อเดียวกันและ PowerPC อินเทล นำเทคโนโลยีนี้มาใช้กับ x86 ใน Pentium Pro ตั้งแต่นั้นมาพีซีซีพียูทั้งหมดก็ใช้เทคโนโลยีที่ไม่ได้สั่งซื้อเป็นหนึ่งในฐานเพื่อให้ได้ประสิทธิภาพสูงสุดเท่าที่จะเป็นไปได้

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

สองวิธีในการจัดการกับความเท่าเทียมกัน

TLP ILP จำกัด IPC

มีสองวิธีในการปฏิบัติต่อความเท่าเทียมกันในโค้ดของโปรแกรม ได้แก่ การขนานกันในระดับเธรดหรือ ILP และการเรียนการสอนแบบขนานหรือ TLP

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

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

เลย์อัมดาห์ล

เราไม่สามารถลืมได้ว่าตามกฎหมายของ Amdahl รหัสประกอบด้วยส่วนต่างๆในอนุกรมซึ่งสามารถเรียกใช้งานได้โดยโปรเซสเซอร์เพียงตัวเดียวและในแบบคู่ขนานซึ่งสามารถเรียกใช้งานได้โดยโปรเซสเซอร์หลายตัว อย่างไรก็ตามไม่ใช่ทุกอย่างที่สามารถขนานกันได้และมีส่วนอนุกรมของรหัสที่ต้องใช้การทำงานแบบอนุกรม

ในช่วง 15 ปีที่ผ่านมาแนวคิดนี้ได้รับการพัฒนาโดยใช้อัลกอริทึมแบบขนานบน GPU ซึ่งมีคอร์เป็นประเภท TLP ในขณะที่โค้ดซีเรียลทำงานบนซีพียูที่เป็นประเภท ILP

การดำเนินการตามคำสั่ง

Ciclo Instrucción Unidad Control

การดำเนินการตามคำสั่งเป็นการดำเนินการคำสั่งแบบคลาสสิกชื่อของมันเกิดจากการที่คำสั่งถูกดำเนินการตามลำดับที่ปรากฏในโค้ดและคำสั่งถัดไปจะไม่สามารถดำเนินการต่อได้จนกว่าคำสั่งก่อนหน้าจะไม่ได้รับการแก้ไข

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

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

ออกคำสั่งเร่ง ILP

GELID-soporte-retención-cpu-AM4

Out-of-order หรือการดำเนินการนอกลำดับเป็นวิธีที่ซีพียูที่ทันสมัยที่สุดเรียกใช้โค้ดและคิดว่าจะหลีกเลี่ยงการหยุดการดำเนินการ ตามชื่อที่ระบุประกอบด้วยการดำเนินการตามคำสั่งของโปรเซสเซอร์ในลำดับที่แตกต่างจากที่ระบุไว้ในรหัส

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

การใช้คำสั่งไม่ตรงตามลำดับช่วยให้คุณสามารถขยายจำนวนคำสั่งโดยเฉลี่ยที่แก้ไขได้ต่อรอบและทำให้คำสั่งนั้นเข้าใกล้ประสิทธิภาพสูงสุด ตัวอย่างเช่น Intel Pentium ตัวแรกมีการดำเนินการตามลำดับและเป็นซีพียูที่สามารถทำงานกับคำสั่งสองคำสั่งกับ 486 ที่สามารถทำงานได้เพียงคำสั่งเดียว แต่ถึงแม้จะมีประสิทธิภาพเนื่องจากการหยุดทำงานก็เพิ่มขึ้นเพียง 40% เท่านั้น

ขั้นตอนเพิ่มเติมสำหรับการไม่อยู่ในลำดับที่

ชำรุด

การใช้งานการดำเนินการนอกคำสั่งเป็นการเพิ่มขั้นตอนเพิ่มเติมให้กับวงจรการเรียนการสอนซึ่งเราได้พูดถึงไปแล้วในบทความชื่อ นี่คือวิธีที่ CPU ของคุณดำเนินการตามคำแนะนำที่ซอฟต์แวร์กำหนด ซึ่งคุณจะพบได้ใน HardZone

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

ขั้นตอนแรกคือสถานีสแตนด์บายในนั้นฮาร์ดแวร์รอให้หน่วยประมวลผลเป็นอิสระ การใช้งานมีความซับซ้อนเนื่องจากเป็นไปตามกลไกที่ไม่เพียง แต่เฝ้าดูเมื่อหน่วยประมวลผลว่าง แต่ยังนับระยะเวลาเฉลี่ยในรอบนาฬิกาของแต่ละคำสั่งที่กำลังดำเนินการเพื่อให้ทราบว่าต้องเรียงลำดับคำสั่งใหม่อย่างไร

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