หน่วยประมวลผลกลางทำอะไรในขณะที่รอการดึงหน่วยความจำหลัก


26

สมมติว่าคำขอ l1 และ l2 แคชส่งผลให้พลาดตัวประมวลผลจะหยุดทำงานจนกว่าหน่วยความจำหลักจะถูกเข้าถึงหรือไม่?

ฉันได้ยินเกี่ยวกับแนวคิดของการเปลี่ยนไปใช้เธรดอื่นถ้าเช่นนั้นจะใช้อะไรในการปลุกเธรดที่ค้างอยู่


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

@ ราฟาเอลส่วนใหญ่ฉันเพิ่งอ่านหนังสือสถาปัตยกรรมคอมพิวเตอร์ ARM System-on-Chip Architecture ของ Steve Furber อาจเป็นสิ่งที่ครอบคลุมที่สุดที่ฉันได้อ่านทั้งหมด อย่างไรก็ตามฉันเริ่มอ่านสถาปัตยกรรมคอมพิวเตอร์: วิธีเชิงปริมาณ มันใช้เทคนิคเพื่อหลีกเลี่ยงการถ่วงเวลาเช่นการสลับเธรด, OOE และการดำเนินการของหน่วยความจำที่ไม่เป็นระเบียบแม้ว่ามันจะไม่ได้ให้ความซับซ้อนของการออกแบบที่ทันสมัยเหมือนตำราเรียนส่วนใหญ่ที่ครอบคลุมสถาปัตยกรรมเก่าหรือให้คำแนะนำที่คลุมเครือ ดำเนินการและทำงานร่วมกัน
102948239408

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

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

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

คำตอบ:


28

หน่วยความจำแฝงเป็นหนึ่งในปัญหาพื้นฐานที่ศึกษาในการวิจัยสถาปัตยกรรมคอมพิวเตอร์

การดำเนินการเก็งกำไร

การดำเนินการเก็งกำไรกับปัญหาคำสั่งที่ไม่ได้รับคำสั่งมักจะสามารถหางานที่มีประโยชน์ที่ต้องทำเพื่อเติมเวลาแฝงในช่วงเวลาที่การโจมตีแคช L1 แต่โดยปกติแล้วจะทำงานที่มีประโยชน์หลังจาก 10 หรือ 20 รอบ มีความพยายามหลายครั้งในการเพิ่มปริมาณงานที่สามารถทำได้ในช่วงเวลาที่พลาด แนวคิดหนึ่งคือพยายามทำการทำนายค่า (Lipasti, Wilkerson และ Shen, (ASPLOS-VII): 138-147, 1996) ความคิดนี้เป็นที่นิยมมากในแวดวงการวิจัยสถาปัตยกรรมวิชาการในขณะที่ดูเหมือนว่าจะไม่ทำงานในทางปฏิบัติ ความพยายามครั้งสุดท้ายในการบันทึกการทำนายค่าจากถังขยะของประวัติศาสตร์คือการดำเนินการแบบเรียกใช้ล่วงหน้า(Mutlu, สิ้นเชิง, Wilkerson และ Patt (HPCA-9): 129, 2003) ในการดำเนินการ runahead คุณรู้จักว่าการคาดการณ์ค่าของคุณจะไปจะผิด แต่การพิจารณาดำเนินการอยู่แล้วแล้วโยนงานทั้งหมดที่อยู่บนพื้นฐานของการคาดคะเนเกี่ยวกับทฤษฎีที่ว่าอย่างน้อยคุณจะเริ่มต้น prefetches บางอย่างสำหรับสิ่งที่มิฉะนั้นจะแคช L2 พลาดท่า ปรากฎว่า runahead เปลืองพลังงานมากจนไม่คุ้มค่า

วิธีสุดท้ายในหลอดเลือดดำซึ่งอาจได้รับแรงฉุดบางอย่างในอุตสาหกรรมนี้เกี่ยวข้องกับการสร้างบัฟเฟอร์เรียงลำดับยาวมาก คำสั่งถูกดำเนินการแบบเก็งกำไรบนพื้นฐานของการทำนายสาขา แต่ไม่มีการทำนายค่าใด ๆ แทนที่จะทำตามคำแนะนำทั้งหมดที่ขึ้นอยู่กับความล่าช้าในการโหลดเป็นเวลานานและรอในการจัดลำดับบัฟเฟอร์ใหม่ แต่เนื่องจากบัฟเฟอร์การเรียงลำดับใหม่มีขนาดใหญ่มากคุณสามารถใช้คำสั่งดึงข้อมูลได้หากตัวทำนายสาขาทำงานได้ดีคุณอาจจะสามารถหางานที่มีประโยชน์ได้ในภายหลังในสตรีมคำสั่ง งานวิจัยที่มีอิทธิพลในบริเวณนี้คือท่อส่งต่อเนื่อง(Srinivasan, Rajwar, Akkary, Gandhi และ Upton (ASPLOS-XI): 107-119, 2004) (แม้ว่าข้อเท็จจริงที่ว่าผู้เขียนมาจาก Intel แต่ฉันเชื่อว่าความคิดนั้นมีแรงฉุดมากขึ้นที่ AMD)

แบบมัลติเธรด

การใช้หลายเธรดสำหรับความทนทานต่อความล่าช้ามีประวัติยาวนานกว่ามากและประสบความสำเร็จในอุตสาหกรรมมากขึ้น เวอร์ชันที่ประสบความสำเร็จทั้งหมดใช้การสนับสนุนฮาร์ดแวร์สำหรับมัลติเธรด ที่ง่าย (และประสบความสำเร็จมากที่สุด) รุ่นนี้คือสิ่งที่มักจะเรียกว่า FGMT ( ปรับเม็ดเล็กแบบมัลติเธรด ) หรือบรรณนิทัศน์แบบมัลติเธรด แต่ละแกนของฮาร์ดแวร์รองรับบริบทของเธรดที่หลากหลาย ( บริบทคือสถานะของรีจิสเตอร์รวมถึงรีจิสเตอร์เช่นตัวชี้คำสั่งและการลงทะเบียนแฟล็กโดยนัย) ในการประมวลผลแบบมัลติเธรดเม็ดเล็กแต่ละหัวข้อจะถูกประมวลผลใน-ใบสั่ง. ตัวประมวลผลติดตามว่าเธรดใดถูกถ่วงเวลาในการโหลด latency long และซึ่งพร้อมสำหรับคำสั่งถัดไปและใช้กลยุทธ์การกำหนดตารางเวลาแบบ FIFO ง่าย ๆ ในแต่ละรอบเพื่อเลือกเธรดที่พร้อมใช้เพื่อประมวลผลรอบนั้น ตัวอย่างแรกของเรื่องนี้ในวงกว้างคือโปรเซสเซอร์ HEP ของ Burton Smith (Burton Smith ไปที่ Tera supercomputer สถาปนิกซึ่งเป็นหน่วยประมวลผลแบบมัลติเธรดที่ละเอียดยิ่งยวด) แต่ความคิดกลับไปไกลกว่านั้นในทศวรรษ 1960 ฉันคิดว่า

FGMT มีประสิทธิภาพโดยเฉพาะในการสตรีมเวิร์กโหลด GPU ที่ทันสมัยทั้งหมด (หน่วยประมวลผลกราฟิก) เป็นมัลติคอร์ที่แต่ละคอร์คือ FGMT และแนวคิดนี้ยังใช้กันอย่างแพร่หลายในโดเมนคอมพิวเตอร์อื่น ๆ T1 ของ Sun ยังเป็น FMGT ที่มีหลายหน่วยความจำและดังนั้น Xeon Phi ของ Intel (โปรเซสเซอร์ที่มักจะเรียกว่า "MIC" และเคยถูกเรียกว่า "Larabee")

แนวคิดของSim พร้อมกันมัลติเธรด (Tullsen, Eggers และ Levy, (ISCA-22): 392-403, 1995) รวมฮาร์ดแวร์หลายเธรดกับการดำเนินการเก็งกำไร โปรเซสเซอร์มีหลายเธรดบริบท แต่แต่ละเธรดจะถูกดำเนินการอย่างพิเศษและไม่เรียบร้อย ตัวกำหนดตารางเวลาที่ซับซ้อนยิ่งขึ้นสามารถใช้ฮิวริสติกแบบต่าง ๆ เพื่อดึงข้อมูลจากเธรดที่มีแนวโน้มว่าจะมีประโยชน์มากที่สุด ( มาลิก, Agarwal, Dhar และ Frank, (HPCA-14: 50-61), 2008 ) บริษัท เซมิคอนดักเตอร์ขนาดใหญ่แห่งหนึ่งเริ่มใช้คำว่าไฮเปอร์เธรดเพื่อการมัลติเธรดพร้อมกันและดูเหมือนว่าชื่อนี้จะเป็นชื่อที่ใช้กันอย่างแพร่หลายในทุกวันนี้

ความกังวลระดับจุลภาคในระดับต่ำ

ฉันรู้ว่าหลังจากอ่านความคิดเห็นของคุณแล้วคุณยังสนใจในการส่งสัญญาณที่เกิดขึ้นระหว่างโปรเซสเซอร์และหน่วยความจำ แคชที่ทันสมัยมักจะอนุญาตให้คิดถึงหลายครั้งที่จะโดดเด่นพร้อมกัน สิ่งนี้เรียกว่าแคชปลอดการล็อก (Kroft, (ISCA-8): 81-87, 1981) (แต่บทความหายากทางออนไลน์และค่อนข้างอ่านยากคำตอบสั้น ๆ : มีหนังสือมากมาย แต่คุณต้องจัดการกับมันโครงสร้างการเก็บหนังสือฮาร์ดแวร์เรียกว่า MSHR (ข้อมูล / สถานะการลงทะเบียนถือเป็นข้อผิดพลาด) ) ซึ่งเป็นชื่อ Kroft ที่ให้ไว้ในกระดาษ 1981 ของเขา)


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

+1, 1. มันประมวลผลบาร์เรลจริงๆหรือไม่ถ้าไม่ใช้การตั้งเวลาแบบปัดเศษ? Wikipedia ทำให้เป็นชื่อพ้องสำหรับ FGMT (ฉันสามารถยอมรับการใช้ "ตัวประมวลผลบาร์เรล" เพื่อปัด robin ด้วยการข้ามแม้ว่าการแบ่งที่คล้ายคลึงกันเป็น stave ที่ขาดหายไป (cf. ไม่พร้อมเธรดเธรด) ไม่หดสัญญาของเส้นรอบวงของบาร์เรล (ฉันคิดว่าตัวประมวลผลบาร์เรล "จริง" หายาก - บางทีตัวประมวลผลอุปกรณ์ต่อพ่วงสำหรับ CDC 6600 - เพราะมันเสียวงจร แต่มันทำให้ฮาร์ดแวร์ง่ายขึ้น) 2. การกล่าวถึงของ SOEMT เช่น Hyper-Threading ของ Itanium และ Northstar et ของ IBM ดูเหมือนเหมาะสมเป็นพิเศษเมื่อถาม
Paul A. Clayton

@ 102948239408 สิ่งอื่นที่คุณอาจใช้ google สำหรับคำเช่น "hit under miss" และ "miss under miss" (ตัวเลือกอื่นคือ "แผงลอย under miss" แต่ฉันเพิ่งลองแล้วดูเหมือนว่าจะไม่มีประโยชน์อะไร) คำศัพท์ที่สถาปนิก (บางคน) ใช้ในปัจจุบันสำหรับตัวเลือกที่แตกต่างกันในสิ่งที่แคชอาจอนุญาต
หลงทางตรรกะ

@ PaulA.Clayton คำศัพท์ไม่เหมาะกับฉันอย่างแน่นอน ฉันเห็นด้วยกับคุณว่าการประมวลผลบาร์เรลควรหมายถึง round-robin แต่ฉันไม่สามารถคิดถึงคำอื่น ๆ ที่หมายถึง: การวนรอบโดยรอบของเธรดเรียงตามลำดับ (ซึ่งเป็นสิ่งที่ GPUs, Xeon Phi และ Sun T1 ทำ) มันเป็น FGMT หรือไม่? ฉันมักจะนึกถึง FGMT ว่ารวมถึง SMT (เช่นไม่ได้ระบุว่าต้องดำเนินการเธรดตามลำดับ) แต่ FGMT อาจดีกว่า "ตัวประมวลผลบาร์เรล" สำหรับกรณีนี้หรือไม่
Wandering Logic

บทความเกี่ยวกับโปรเซสเซอร์ Barrel ของ Wikipedia: "รู้จักกันในชื่อ" interleaved "หรือ" fine-grained "temporal multithreading" ดังนั้น IMT และ FGMT จึงเป็นคำที่รู้จักกันน้อย ฉันคิดว่าฉันได้อ่าน "ละเอียดมาก" มากกว่า "interleaved" แต่ interleaved ไม่ใช่เรื่องแปลก โดยทั่วไปฉันใช้ FG (สำหรับฉัน "เม็ดเล็ก" หมายถึงการแยกมากกว่าที่ SMT มีให้) FG มีข้อได้เปรียบที่ interleaved สามารถนำไปใช้กับ SoEMT ฉันสงสัยว่านี่เป็นเพียงการเปลี่ยนแปลงการใช้ "ตัวประมวลผลบาร์เรล" ที่ฉันจะต้องยิ้ม (ฟันของฉัน) และทน
Paul A. Clayton

16

คำตอบสั้น ๆ คือ: ไม่มีอะไรโปรเซสเซอร์จะหยุดทำงาน

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

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

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

เทคนิคหนึ่งคือการดึงข้อมูลการเก็งกำไร : ตัวประมวลผลพยายามเดาตำแหน่งหน่วยความจำที่จะเข้าถึงและดึงข้อมูลไปยังแคชล่วงหน้า ตัวอย่างเช่นการวนซ้ำผ่านบล็อกหน่วยความจำเป็นเรื่องธรรมดาดังนั้นหากมีการโหลดรายการแคชสำหรับที่อยู่หน่วยความจำ 0x12340000, 0x12340010 และ 0x12340020 อาจเป็นการดีที่จะโหลดบรรทัดสำหรับ 0x12340030 คอมไพเลอร์สามารถช่วยด้วยการสร้างคำแนะนำ prefetchซึ่งเป็นเหมือนโหลดยกเว้นว่าพวกเขาจะถ่ายโอนข้อมูลจากหน่วยความจำหลักไปยังแคชเท่านั้นไม่ใช่ลงในโปรเซสเซอร์ลงทะเบียน

เทคนิคก็คือการดำเนินการเก็งกำไร โปรเซสเซอร์เริ่มประมวลผลคำสั่งถัดไปก่อนที่จะทำการโหลด นี้เกิดขึ้นตามธรรมชาติอยู่แล้วเพราะpipeliningของคำแนะนำ คำสั่งที่ไม่ขึ้นอยู่กับค่าที่โหลดสามารถดำเนินการได้ด้วยวิธีนี้: โปรเซสเซอร์ต้องทำการวิเคราะห์การพึ่งพา สำหรับคำแนะนำแบบมีเงื่อนไข (เช่น load r1; branch ถ้า r1 ≠ 0) ตัวประมวลผลจะใช้ฮิวริสติกการทำนายสาขาเพื่อคาดเดาค่าที่จะได้ การดำเนินการเก็งกำไรหลังจากโหลดจะต้องมีการกรอในกรณีที่โหลดก่อให้เกิดการยกเลิก

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

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

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


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

1
@Raphael Right: เท่าที่ซอฟท์แวร์นั้นเกี่ยวข้องสำหรับทุกสิ่งนอกจากประสิทธิภาพมีซีพียูสองตัว
Gilles 'หยุดชั่วร้าย'

ซีพียูที่มีเธรดนั้นมีหน่วยประมวลผลกึ่งอิสระจำนวนมาก (ตัวเพิ่มจำนวนเต็มและจำนวนทศนิยมตัวคูณและอื่น ๆ ) และฉันคิดว่าบริบททั้งสองสามารถใช้หน่วยดำเนินการแยกต่างหากพร้อมกัน - ไม่แน่ใจ 100% เกี่ยวกับเรื่องนี้
Russell Borogove

@RussellBorogove ใช่ฉันไม่ได้เอ่ยถึงมันเพราะแม้แต่ซีพียูที่ไม่ใช่ไฮเปอร์เธรดก็สามารถมี ALU / FPU / หลาย ... และแกนที่แยกกันในทางกลับกันบางครั้งแบ่งปัน FPU เป็นต้น
Gilles 'หยุดความชั่วร้าย'

5

คำตอบสำหรับคำถามนี้จะแตกต่างกันไปตามสถาปัตยกรรมที่มีปัญหา ในขณะที่ซีพียูจำนวนมากจะหยุดทำงาน (ARM, x86 โดยไม่ต้องไฮเปอร์เธรด ฯลฯ ) เนื่องจากใช้เวลาในการสลับเธรดนานเกินไปนั่นไม่ใช่วิธีการที่ใช้ในทุกสถาปัตยกรรม ในบางสถาปัตยกรรมแต่ละเธรดที่กำหนดเวลาไว้บน CPU มีไฟล์รีจิสเตอร์อิสระของตัวเองดังนั้นโปรเซสเซอร์อาจดำเนินการงานจากเธรดที่ไม่รอการเข้าถึงหน่วยความจำ ฉันเข้าใจว่านี่คือขอบเขตที่ จำกัด สิ่งที่ไฮเปอร์เธรด x86 ทำ (ใช้เพียง 2 เธรด) แต่มันก็ธรรมดากว่ามาก GPGPUสถาปัตยกรรม ในกรณีเฉพาะของ CUDA อย่างน้อยหลายสิบถ้าไม่ใช่หลายร้อยแห่งเกลียวของเธรดมักจะโหลดบนมัลติโปรเซสเซอร์ที่กำหนดในเวลาใดก็ตามโดยแต่ละเธรด (หลายร้อยหรือหลายพัน) มีรีจิสเตอร์ของตนเอง สิ่งนี้อนุญาตให้สถาปัตยกรรมดำเนินการคำสั่งจากเธรดอื่นในรอบถัดไปเมื่อเธรดที่กำหนดมีปัญหาการเข้าถึงหน่วยความจำ ดังนั้นตราบเท่าที่โหลดเธรดจำนวนมากเพียงพอแกนประมวลผลจะไม่ว่างสำหรับการเข้าถึงหน่วยความจำ ดูแนวทางการปฏิบัติงานและลำดับชั้นของหน่วยความจำสำหรับข้อมูลเพิ่มเติม

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