การคาดคะเนสาขาประเภทใดสำคัญกว่ากัน?


11

ฉันสังเกตว่ามีรัฐสองประเภทที่แตกต่างกันในการทำนายสาขา

  1. ในการประมวลผลแบบซูเปอร์คาร์ซึ่งการทำนายสาขามีความสำคัญมากและส่วนใหญ่อยู่ในการประมวลผลล่าช้ามากกว่าการดึงข้อมูลการหน่วงเวลา

  2. ในขั้นตอนการสอนซึ่งการดึงข้อมูลมีปัญหามากขึ้นเนื่องจากคำแนะนำไม่ได้ถูกดำเนินการจนกระทั่งในภายหลัง

ข้อใดต่อไปนี้มีความสำคัญมาก (ซึ่งสิ่งเหล่านี้มีความสำคัญต่อ CPU ในขณะนี้ต่อวัน) หากทั้งสองมีความสำคัญเท่ากันหรือในกรณีที่สองมีความสำคัญมากกว่าทำไมเราไม่มีท่อส่งคำสั่งสองอัน (อาจมีความยาวครึ่งหนึ่ง) และจากนั้นขึ้นอยู่กับกิ่งไม้เพียงแค่เลือกหนึ่งจากนั้นเริ่มประชากรจาก เริ่มต้น?


1
บางทีทั้งสองมีความสำคัญขึ้นอยู่กับสถานการณ์หรือไม่
กราฟิลส์

คำตอบ:


6

ฉันไม่ทราบว่ากรณีใดแพร่หลาย แต่ฉันต้องการเสนอความคิดบางอย่างเกี่ยวกับข้อเสนอของคุณสำหรับท่อคู่

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

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

ให้เราทำการคำนวณคร่าวๆ เพื่อความง่ายขอให้เราสมมติว่าการจัดการสองท่อแทนหนึ่งไม่ทำให้เกิดค่าใช้จ่ายในการจัดการเพิ่มเติม ค่าใช้จ่ายที่คาดหวัง (เช่นพลังงานความร้อน) คือโดยมีหนึ่งขั้นตอน (คือค่าใช้จ่ายในการดำเนินการทางเลือกอื่น ๆ ,ความน่าจะเป็นสำหรับการย้อนกลับและค่าใช้จ่ายสำหรับการย้อนกลับ ทางเลือก) แต่ทั้งหรือ - มีขนาดใหญ่กว่าถ้าและมีขนาดค่อนข้างเล็กและc p c r 2 c 2 c + p c r c p c r p t + p ( t r + t ) t t + p t r p pC=c+p(cr+c)cpcr2c2c+pcrCpcrpแน่นอน (เท่าที่ฉันรู้การคาดการณ์สาขาที่ทันสมัยมีความแม่นยำมากกว่า 90%) และเราไม่ได้รับค่าใช้จ่ายเท่านี้! เวลาดำเนินการที่คาดหวังคือโดยมีหนึ่งและ resp ด้วยสอง; เนื่องจากมีขนาดเล็กประหยัดเวลาจึงไม่สำคัญt+p(tr+t)tt+ptrp


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

@ gnasher729 และนั่นอาจเป็นก่อนที่เราจะเรียนรู้เกี่ยวกับข้อบกพร่องด้านความปลอดภัยที่เชื่อมโยงกับคุณสมบัติเช่นนี้หรือไม่?
ราฟาเอล

2

ในแง่หนึ่งผลของการคาดคะเนสาขามีความสำคัญยิ่งในการดึงคำแนะนำเนื่องจากคำสั่งที่ไม่ได้นำมาใช้ไม่สามารถดำเนินการได้

ด้วยความเคารพต่อการดำเนินการทั้งสองเส้นทางของสาขานี้เรียกว่าการดำเนินการกระตือรือร้นและได้รับการวิจัยค่อนข้างมาก Augustus K. Uht และ Vijay Sindagi เรื่อง "Disjoint Eager Execution: รูปแบบที่เหมาะสมที่สุดของการดำเนินการเก็งกำไร" (1995) อาจจะดูมีค่า

การประมวลผลที่กระตือรือร้นมีปัญหาหลายประการ สำหรับการเก็งกำไรแบบลึกจำนวนเส้นทางที่ต้องติดตามสามารถเพิ่มขึ้นแบบทวีคูณ (แต่ละเส้นทางของเส้นทางแยกอาจพบสาขา) การคาดการณ์ของสาขามักจะแม่นยำมาก (> ถูกต้อง 90%) ดังนั้นการดำเนินการทั้งสองเส้นทางจะสิ้นเปลือง การดำเนินการที่กระตือรือร้นยังสามารถ "ปนเปื้อน" แคชด้วยเนื้อหาที่ไร้ประโยชน์ (บทความที่กล่าวถึงข้างต้นเสนอให้ดำเนินการอย่างกระตือรือร้นอย่าง จำกัดเพื่อหลีกเลี่ยงปัญหาเหล่านี้) ความกระตือรือร้นที่ จำกัด ในการเรียกใช้เส้นทางอื่นมีปัญหาน้อยลง

อีกวิธีหนึ่งที่ได้รับการเสนอคือการคาดคะเนสาขา "เปลญวน" แบบไดนามิก Artur Klauser และคณะของ "Dynamic Hammock Predication สำหรับสถาปัตยกรรมชุดคำสั่งที่ไม่ได้กำหนดล่วงหน้า" (1998) อาจคุ้มค่าที่จะอ่านสำหรับแนวคิดนั้น (Hyesoon Kim et al.'s "Wish Branches: การรวมการแบรนช์ตามเงื่อนไขและการทำนายเพื่อการบังคับใช้ Adaptive Predicated Execution" เสนอให้เพิ่มในสาขาของ ISA ซึ่งอำนวยความสะดวกในการทำนายของเปลญวนและขยายวิธีการนี้ไปสู่


นั่นเป็นคำตอบที่ดีจริงๆ! ขอบคุณ. :-)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.