ตัวประมวลผลความสัมพันธ์ของ Windows ทำงานอย่างไรกับซีพียูแบบไฮเปอร์


27

ตัวประมวลผลความสัมพันธ์ของ Windows ทำงานอย่างไรกับซีพียูแบบไฮเปอร์ ลองใช้ตัวอย่าง (ภาพ) ของระบบที่มีสี่คอร์โดยแต่ละคอร์มีแกนเสมือนแบบไฮเปอร์เธรด

  1. คอร์ใดที่ตรงกับ "CPU" แต่ละอันด้านล่าง?
  2. ทำ (พูด) CPU 6 และ CPU 7 ด้านล่างแสดงถึงหนึ่งคอร์หรือไม่ HT และแกนที่แท้จริง?
  3. ตัวอย่างเช่นหาก CPU 6 แสดงถึงแกนประมวลผลจริงและ CPU 7 เป็นแกน HT จะมีการกำหนดเธรดให้กับเพียงแค่ CPU7 เท่านั้นที่เหลือทรัพยากรของแกนหลักจริงหรือไม่ (สมมติว่าแกนกำลังทำงานอื่น ๆ )
  4. การทำไฮเปอร์เธรดถูกจัดการทั้งหมดภายในตัวประมวลผลหรือไม่ ถ้าเป็นเช่นนั้นจะอยู่ที่ขอบเขต CPU หรือขอบเขตหลักหรือไม่ ตัวอย่าง: หาก CPU 6 และ 7 แสดงถึงหนึ่งคอร์มันไม่สำคัญว่ากระบวนการจะถูกกำหนดให้เพราะ CPU จะกำหนดทรัพยากรให้เหมาะสมกับเธรดที่กำลังทำงานหรือไม่
  5. ฉันสังเกตเห็นว่ากระบวนการแบบเธรดเดี่ยวที่ใช้เวลานานจะถูกเด้งรอบแกนประมวลผลค่อนข้างน้อยอย่างน้อยตามตัวจัดการงาน นี่หมายความว่าการกำหนดกระบวนการให้กับแกนหลักเดียวจะปรับปรุงประสิทธิภาพได้เล็กน้อย (โดยหลีกเลี่ยงการสลับบริบทและการทำให้แคชใช้ไม่ได้เป็นต้น) ถ้าเป็นเช่นนั้นฉันจะรู้ได้หรือไม่ว่าฉันไม่ได้กำหนดให้ "แค่แกนหลักเสมือน"

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

เมนูความเกี่ยวข้องของตัวประมวลผล


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

นอกจากนี้หนึ่งความคิดเห็นล่าสุดสำหรับคุณ "HT นั้นยอดเยี่ยม แต่ดูเหมือนว่าจะลดความโปร่งใสของการจัดสรรทรัพยากร" นี้เป็นจริง 100% แต่มีเล็ก ๆ น้อย ๆ ที่คุณสามารถทำได้เกี่ยวกับเรื่องนี้มิได้มีเหตุผลมากสำหรับคุณที่จะทำอะไรเกี่ยวกับมัน ระบบปฏิบัติการที่ทันสมัยทั้งหมดรู้ว่า hyperthreading คืออะไรส่วนใหญ่มีตัวกำหนดเวลาโปรเซสเซอร์ขั้นสูงเพื่อชดเชยและนอกเหนือจากบางกรณีที่เฉพาะเจาะจง (และฉันหมายถึงไม่กี่) มีประโยชน์ด้านประสิทธิภาพเกือบตลอดเวลา
Breakthrough

คำตอบ:


18

คอร์ใดที่ตรงกับ "CPU" แต่ละอันด้านล่าง?

สมมติว่าเรามี Core 1, 2, 3 และ 4, CPU4 และ CPU5 เป็นตัวแทนของ core 3

ทำ (พูด) CPU 6 และ CPU 7 ด้านล่างแสดงถึงหนึ่งคอร์หรือไม่ HT และแกนที่แท้จริง?

ไม่มีความแตกต่างระหว่างทั้งสอง - พวกเขาทั้งสองมีส่วนต่อประสานฮาร์ดแวร์ทางกายภาพกับ CPU ส่วนต่อประสานแบบลอจิคัลถูกนำไปใช้ในฮาร์ดแวร์ (ดูแผ่นข้อมูลตัวประมวลผล Intel Core, เล่ม 1สำหรับรายละเอียดเพิ่มเติม) โดยทั่วไปแต่ละคอร์มีหน่วยการดำเนินการแยกกันสองหน่วย แต่จะแบ่งใช้ทรัพยากรทั่วไประหว่างหน่วยเหล่านั้น นี่คือเหตุผลที่ในบางกรณีการทำไฮเปอร์เธรดสามารถลดประสิทธิภาพได้จริง

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

ดูด้านบน. เธรดที่กำหนดให้กับเฉพาะ CPU6 หรือเฉพาะ CPU7 จะดำเนินการด้วยความเร็วเท่ากัน (สมมติว่าเธรดทำงานได้เหมือนกันและแกนประมวลผลอื่น ๆ ในโปรเซสเซอร์ไม่ทำงาน) Windows รู้เกี่ยวกับโปรเซสเซอร์ที่เปิดใช้งาน HT และตัวกำหนดตารางเวลาจะคำนึงถึงสิ่งเหล่านี้

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

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

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

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

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


5

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

ตัวอย่างเช่นสมมติว่าคุณมีไฮเปอร์เธรดสี่คอร์ที่เรียกว่า A, B, C และ D หากคุณถือว่า A และ B แชร์แคช L2 และ C และ D แชร์แคช L2 ลำดับนั้นควรเป็นดังนี้:
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2

ด้วยวิธีนี้ระบบปฏิบัติการที่คว้า CPU เพียงสองตัวเท่านั้นที่จะใช้แคช L2 ทั้งหมด นอกจากนี้ระบบปฏิบัติการที่คว้าซีพียูได้เพียงสี่ตัวเท่านั้นที่จะใช้หน่วยปฏิบัติทั้งหมด

นี่เป็นวิธีที่ควรจะเป็น

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


1
  1. วิธีการที่สอดคล้องกันขึ้นอยู่กับวิธีการที่ซีพียูและมาเธอร์บอร์ดแจกแจงและระบุคอร์ สิ่งที่ควรจะเกิดขึ้นก็คือซ็อกเก็ตทางกายภาพได้รับการระบุก่อนแกนตรรกะถัดไปและแกนเสมือนสุดท้าย ในกรณีของคุณคอร์ 0-3 ควรเป็นฟิสิคัลคอร์และ 4-7 คอร์ HT เสมือน เหตุผลหลักสำหรับกรณีนี้คือในกรณีที่คุณเรียกใช้ระบบปฏิบัติการที่ไม่สามารถจัดการหน่วยดำเนินการที่มีอยู่ทั้งหมดได้มักจะได้รับหน่วยงานอิสระมากที่สุดก่อนหน้าหน่วยที่ใช้ร่วมกัน มันจะไม่ดีถ้าระบบปฏิบัติการซีพียู 2 ตัวที่สมมุติว่าพบคู่ HT ในระบบของคุณแทน 2 คอร์ที่แตกต่างกัน (นี่เป็นปัญหาที่แท้จริงสำหรับระบบ HT บางรุ่นก่อนที่จะสามารถอัปเดตตัวกำหนดเวลาเคอร์เนลสำหรับ CPU ใหม่ได้)
  2. ไม่เห็น 1
  3. ไม่ HT มีความซับซ้อนมากกว่านั้น โปรดจำไว้ว่าแกนประมวลผลเสมือน 2 แกนมักจะแบ่งปันทรัพยากรบางอย่างในขณะที่บิตอื่น ๆ ถูกแยกออก แต่มีเพียงหนึ่งแกนเท่านั้นที่สามารถดำเนินการได้ในแต่ละครั้ง
  4. เรียงจาก ตัวอย่างของคุณ (ตามสมมติฐาน) โดยทั่วไปนั้นถูกต้อง อย่างไรก็ตามหากแอปพลิเคชันสามารถรู้ว่าเวิร์กโหลดชนิดใดกำลังทำงานอยู่มันสามารถช่วยเธรดกำหนดเวลา OS ได้อย่างเหมาะสม
  5. มีเหตุผลที่ดีมากสำหรับการกระโดดหลัก: การกระจายภาระความร้อนรอบ ๆ เนื่องจากในหลายกรณีแคชระดับสูงกว่า (L2, L3) ใช้ร่วมกันทั่วทุกแกนอย่างไรก็ตามการกระโดดหลักจะไม่มีผลกระทบต่อประสิทธิภาพการทำงานอย่างมีนัยสำคัญ แต่ผลกระทบทางความร้อนจะมีความสำคัญเนื่องจากคุณจะไม่มี "ฮอตสปอต" บน แกนเดียวที่ทำงานอยู่ตลอดเวลาขณะที่แกนอื่น ๆ ไม่ทำงาน ตอนนี้การข้ามซ็อคเก็ตในระบบหลายซ็อกเก็ต (โดยเฉพาะระบบ NUMA) สามารถส่งผลกระทบต่อประสิทธิภาพได้อย่างมาก ตัวกำหนดเวลาส่วนใหญ่ทราบถึงสิ่งนี้และนำมาพิจารณาด้วย

ท้ายที่สุดสิ่งที่ทำให้คุณเดือดร้อนคือบ่อยครั้งที่คุณ (ในฐานะผู้ใช้ปลายทาง) สามารถทำกับความสัมพันธ์แบบเธรดเพื่อส่งผลกระทบต่อประสิทธิภาพอย่างมีนัยสำคัญนอกเหนือจากการตรวจสอบให้แน่ใจว่าคุณกำลังใช้ระบบปฏิบัติการที่ทันสมัย ระบบของคุณ

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


4
"คอร์ 0-3 ควรเป็นฟิสิคัลคอร์และ 4-7 คอร์ HT เสมือน" จริงๆแล้วแกน 0 และคอร์ 1 จะตรงกับแกนทางกายภาพ (เดี่ยว) เดียวกัน แต่ละแกน "hyperthreaded" มีการเชื่อมต่อทางกายภาพสองตัวกับ CPU ดังนั้น Windows จะเห็นแกนประมวลผลทางกายภาพ 8 แกน เพิ่งรู้ว่า CPU มี hyperthreading ดูแผ่นข้อมูล Intel Core สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้หากคุณสนใจ
Breakthrough

@Breakthrough นั่นคงจะไม่เป็นทอพอโลยีที่ดีเพราะนั่นหมายความว่าระบบไร้เดียงสาที่รองรับเฉพาะ 4 คอร์เท่านั้นที่จะปิดท้ายโดยใช้เพียงครึ่งเดียวของคอร์ที่มีอยู่จริง หนึ่งคอร์เสมือนจากแต่ละฟิสิคัลคอร์ควรปรากฏในรายการคอร์เสมือนก่อนที่จะมีการแสดงรายการแกนประมวลผลเสมือนจริงที่สอง
David Schwartz

@DavidSchwartz ทอพอโลยีที่ดีหรือไม่นั่นคือวิธีที่ตัวประมวลผลเชิงตรรกะแจงนับ ดังนั้นจึงแนะนำอย่างกว้างขวางให้ปิดการใช้งานไฮเปอร์เธรดในระบบปฏิบัติการก่อนหน้า (เช่น Windows 2000 และรุ่นก่อนหน้า) ที่ไม่ได้ระบุ LPs กับแกนหลักเทียบกับแพ็คเกจ CPU จริง
เจมี่ Hanrahan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.