โปรแกรมเมอร์อาจมีเหตุผลอะไรบ้างที่ต้องการปิดไฮเปอร์เธรด


13

บริษัท ของฉันเพิ่งซื้อคอมพิวเตอร์ใหม่เพื่อแทนที่เครื่อง 2GB Windows XP รุ่นเก่า มีคนในทีมของฉันสังเกตเห็นว่าพวกเขามาพร้อมกับการปิดใช้งานไฮเปอร์เธรดและบอกให้ทุกคนรีบูตและเปิดใช้งาน มีประโยชน์ในการเขียนโปรแกรมบนเครื่องที่ปิดการใช้งานไฮเปอร์เธรดหรือไม่?


1
คุณใช้ซีพียู Intel รุ่นใดเช่น Core i5 หรือ i7
JB King

@JBK เป็นคำถามที่ดีฉันไม่รู้ฉันไม่มีเครื่องจักรเหล่านั้นด้วยตัวเอง
Pops

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

ในเกม Lucasarts Grim Fandango เครื่องยนต์เสียงวิ่งเข้าสู่สภาพการแข่งขันเมื่อวิ่งด้วยไฮเปอร์เธรด

คำตอบ:


14

ใช่ผมเคยทำงานใน app ซึ่งดำเนินการที่ดีขึ้นเมื่อทำงานบนเครื่องที่มี HT คนพิการ

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

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


11

ผมไม่ทราบรายละเอียดทางเทคนิค แต่เห็นได้ชัดว่าถ้าแอป (หรือ OS) จะไม่เหมาะสำหรับ Hyper-Threading, Hyper-Threading จริงสามารถลดประสิทธิภาพการทำงาน

แม้แต่ Intel ขอแนะนำให้ปิดเครื่องในกรณีนี้:

ระบบปฏิบัติการเดสก์ท็อปต่อไปนี้ไม่แนะนำให้ใช้กับ Hyper-Threading Technology หากคุณใช้ระบบปฏิบัติการเดสก์ท็อปต่อไปนี้ขอแนะนำให้คุณปิดการใช้งานเทคโนโลยี Hyper-Threading ในโปรแกรมการตั้งค่า BIOS ระบบ: [... ]

(ที่มา: http://www.intel.com/support/processors/sb/CS-017343.htm )

ดังนั้นผู้ผลิต (หรือซัพพลายเออร์) อาจต้องการความระมัดระวัง


เป็นที่ทราบกันดีว่าทำให้บางเกมทำงานช้ากว่าเมื่อปิดการใช้ไฮเปอร์เธรด
Klaim

4
มันจะน่าสนใจถ้าพวกเขากังวลเกี่ยวกับประสิทธิภาพของเกมที่เล่นในที่ทำงาน
dietbuddha

บนระบบมัลติคอร์สองเธรดอาจถูกจัดสรรให้กับไฮเปอร์เธรดสองอันบนคอร์เดียวกันทำให้คอร์อื่นไม่ได้ทำงานและให้ประสิทธิภาพการทำงานน้อยกว่าการวางเธรดแต่ละคอร์ในแกนที่ต่างกัน จนกว่าระบบปฏิบัติการจะรับรู้ถึงความแตกต่างระหว่างคอร์ที่ต่างกันและไฮเปอร์เธรดที่ต่างกันบนแกนเดียวกัน ...
Steve314

1
@ Steve314: นั่นเป็นกรณีที่กลับมาพร้อมกับ Windows2000 (และการปิดการใช้งาน HT นั้นเป็นความคิดที่ดีถ้าคุณใช้งาน) แต่ Windows XP ควรจะทราบ HT (ดูเช่นdownload.microsoft.com/download/5/7/ 7 / … ) และไม่ตกหลุมพรางดังกล่าว ฉันคิดว่าตรรกะที่คล้ายกันได้สร้างขึ้นใน Linux จากเคอร์เนลบางรุ่น
timday

6

ยิ่งกว่านั้น OEM ก็เป็นเพียงแค่การอนุรักษ์ OEM มักจะจัดส่งเมื่อปิดการใช้งาน featuers ขั้นสูง (เช่น HT, No-Execute bit, vt และอื่น ๆ ) เหตุผลก็คือสถานการณ์ที่หายากบางอย่างอาจทำให้การตั้งค่าเหล่านั้นล้มเหลวและผู้ที่ต้องการให้ฟีเจอร์นั้นสามารถเปิดใช้งานได้ง่าย

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

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


2
นี่เป็นกรณีของเครื่องจักรที่ปิด HT เสมอ ความเข้ากันได้สูงสุดและช่วยผู้ขายจากการโทรสนับสนุนที่แปลกประหลาด
Patrick Hughes

5

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


2

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

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


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

0

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

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


0

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

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