ฉันสงสัยว่าการเร่งความเร็วเชิงทฤษฎีคืออะไรจากซีพียูที่มีเธรดจำนวนมาก สมมติว่าการขนาน 100% และการสื่อสาร 0 - CPU สองตัวจะให้ความเร็วเพิ่มขึ้น 2 CPU แบบเธรดไฮเปอร์คืออะไร
ฉันสงสัยว่าการเร่งความเร็วเชิงทฤษฎีคืออะไรจากซีพียูที่มีเธรดจำนวนมาก สมมติว่าการขนาน 100% และการสื่อสาร 0 - CPU สองตัวจะให้ความเร็วเพิ่มขึ้น 2 CPU แบบเธรดไฮเปอร์คืออะไร
คำตอบ:
อย่างที่คนอื่น ๆ พูดกันทั้งหมดนี้ขึ้นอยู่กับงาน
เพื่อแสดงสิ่งนี้ให้ดูที่การวัดประสิทธิภาพจริง:
สิ่งนี้นำมาจากวิทยานิพนธ์หลักของฉัน (ไม่สามารถออนไลน์ได้ในขณะนี้)
นี่แสดงให้เห็นถึงการเพิ่มความเร็วสัมพัทธ์1ของอัลกอริธึมการจับคู่สตริง (ทุกสีเป็นอัลกอริธึมที่แตกต่างกัน) อัลกอริธึมถูกประมวลผลบนโปรเซสเซอร์ Intel Xeon X5550 quad-core สองตัวพร้อมไฮเปอร์เธรด กล่าวอีกอย่างคือ: มีทั้งหมด 8 คอร์ซึ่งแต่ละตัวสามารถรันเธรดฮาร์ดแวร์สองเธรด (=“ ไฮเปอร์เธรด”) ดังนั้นเบนช์มาร์กจะทดสอบการเร่งความเร็วด้วยเธรดสูงสุด 16 เธรด (ซึ่งเป็นจำนวนเธรดที่เกิดขึ้นพร้อมกันสูงสุดที่การกำหนดค่านี้สามารถดำเนินการได้)
อัลกอริธึมสองในสี่ (สีน้ำเงินและสีเทา) สเกลเชิงเส้นมากกว่าหรือน้อยกว่าในช่วงทั้งหมด นั่นคือมันได้ประโยชน์จากการทำไฮเปอร์เธรด
อัลกอริธึมอื่น ๆ อีกสอง (เป็นสีแดงและสีเขียวทางเลือกที่โชคไม่ดีสำหรับคนตาบอดสี) ปรับขนาดเป็นเส้นตรงได้สูงสุด 8 เธรด หลังจากนั้นพวกเขาก็ซบเซา สิ่งนี้บ่งชี้อย่างชัดเจนว่าอัลกอริธึมเหล่านี้ไม่ได้ประโยชน์จากการทำไฮเปอร์เธรด
เหตุผล? ในกรณีนี้เป็นการโหลดหน่วยความจำ อัลกอริทึมสองอันดับแรกต้องการหน่วยความจำมากขึ้นสำหรับการคำนวณและถูก จำกัด โดยประสิทธิภาพของบัสหน่วยความจำหลัก ซึ่งหมายความว่าในขณะที่เธรดฮาร์ดแวร์หนึ่งกำลังรอหน่วยความจำเธรดอื่นสามารถดำเนินการต่อได้ เคสการใช้งานที่สำคัญสำหรับเธรดฮาร์ดแวร์
อัลกอริธึมอื่น ๆ ต้องการหน่วยความจำน้อยกว่าและไม่ต้องรอรถบัส พวกมันเกือบจะถูกคำนวณทั้งหมดและใช้เลขจำนวนเต็มเท่านั้น ดังนั้นจึงไม่มีศักยภาพสำหรับการดำเนินการแบบขนานและไม่ได้รับประโยชน์จากท่อคำสั่งแบบขนาน
1คือตัวเร่งความเร็วของ 4 หมายความว่าอัลกอริทึมทำงานเร็วสี่เท่าราวกับว่ามันถูกประมวลผลด้วยเธรดเดียวเท่านั้น ตามคำนิยามแล้วอัลกอริธึมทุกตัวที่ดำเนินการกับเธรดหนึ่งตัวจะมีตัวเร่งความเร็วสัมพัทธ์เท่ากับ 1
ปัญหาคือมันขึ้นอยู่กับงาน
ความคิดที่อยู่เบื้องหลัง hyperthreading นั้นโดยพื้นฐานแล้วว่าซีพียูสมัยใหม่ทุกตัวมีปัญหาการดำเนินการมากกว่าหนึ่งครั้ง โดยปกติแล้วจะอยู่ใกล้กับโหลมากกว่า แบ่งระหว่างจำนวนเต็ม, ทศนิยม, SSE / MMX / สตรีมมิ่ง (สิ่งที่เรียกว่าวันนี้)
นอกจากนี้แต่ละหน่วยมีความเร็วแตกต่างกัน เช่นอาจใช้หน่วยคณิตศาสตร์จำนวนเต็ม 3 รอบเพื่อประมวลผลบางอย่าง แต่การหารจุดลอยตัว 64 บิตอาจใช้เวลา 7 รอบ (นี่คือตัวเลขในตำนานที่ไม่ได้ขึ้นอยู่กับอะไรเลย)
การดำเนินการที่ไม่เป็นไปตามคำสั่งช่วยให้หน่วยต่าง ๆ เต็มจำนวนมากที่สุดเท่าที่จะทำได้
อย่างไรก็ตามงานเดี่ยวใด ๆ จะไม่ใช้หน่วยดำเนินการทุกหน่วยในทุกช่วงเวลา แม้กระทั่งการแยกเธรดไม่สามารถช่วยได้ทั้งหมด
ดังนั้นทฤษฎีจะกลายเป็นว่ามี CPU ตัวที่สองเธรดอื่นสามารถทำงานได้โดยใช้ยูนิตการดำเนินการที่มีอยู่ซึ่งไม่ได้ใช้งานโดยการแปลงรหัสเสียงซึ่งเป็น 98% SSE / MMX และหน่วย int และ float ทั้งหมด ไม่มีการใช้งานยกเว้นบางสิ่ง
สำหรับฉันแล้วสิ่งนี้มีความหมายมากกว่าในโลกของ CPU เพียงตัวเดียวโดยมี CPU ตัวที่สองที่อนุญาตให้เธรดข้ามขีด จำกัด นั้นได้ง่ายขึ้นด้วยการเข้ารหัสพิเศษเล็กน้อย (ถ้ามี) เพื่อจัดการ CPU ตัวที่สองปลอมนี้
ในโลกคอร์ 3/4/6/8 มีซีพียู 6/8/12/16 มันช่วยได้หรือไม่ dunno เท่าไหร่ ขึ้นอยู่กับงานที่ทำ
ดังนั้นในการตอบคำถามของคุณจริง ๆ มันจะขึ้นอยู่กับงานในกระบวนการของคุณซึ่งหน่วยการดำเนินการที่ใช้และใน CPU ของคุณหน่วยการดำเนินการใดที่ไม่ได้ใช้งาน / ใช้งานไม่ได้และพร้อมใช้งานสำหรับ CPU ปลอมตัวที่สอง
มีการพูดถึง 'คลาส' ของการคำนวณเพื่อประโยชน์ (โดยทั่วไปไม่ชัดเจน) แต่ไม่มีกฎที่ยากและรวดเร็วและสำหรับบางคลาสมันทำให้สิ่งต่าง ๆ ช้าลง
ฉันมีหลักฐานพอสังเขปเพื่อเพิ่มคำตอบของ geoffcซึ่งจริง ๆ แล้วฉันมี Core i7 CPU (4-core) ที่มี hyperthreading และเล่นบิตด้วยการแปลงวิดีโอซึ่งเป็นงานที่ต้องใช้การสื่อสารและการซิงโครไนซ์ แต่มีเพียงพอ การขนานที่คุณสามารถโหลดระบบได้อย่างมีประสิทธิภาพ
ประสบการณ์ของฉันกับการเล่นกับจำนวนซีพียูที่กำหนดให้กับงานโดยทั่วไปใช้คอร์ "พิเศษ" 4 ไฮเปอร์เธรดที่เทียบเท่ากับซีพียูที่เพิ่มขึ้นประมาณ 1 พลังการประมวลผล แกนพิเศษแบบ "hyperthreaded" 4 อันเพิ่มเข้ามาในปริมาณการประมวลผลที่ใช้งานได้เท่ากันจาก 3 ถึง 4 "ของจริง"
จริงอยู่ที่ว่านี่ไม่ใช่การทดสอบที่ยุติธรรมเนื่องจากเธรดการเข้ารหัสทั้งหมดน่าจะแข่งขันกันสำหรับทรัพยากรเดียวกันในซีพียู แต่สำหรับฉันแล้วมันแสดงให้เห็นอย่างน้อยก็เป็นการเพิ่มพลังการประมวลผลโดยรวมเล็กน้อย
วิธีเดียวที่แท้จริงในการแสดงว่าจะช่วยได้จริงหรือไม่ว่าจะทำการทดสอบประเภท Integer / Floating Point / SSE ที่แตกต่างกันสองสามตัวในเวลาเดียวกันบนระบบที่เปิดใช้งานและปิดการใช้งาน สิ่งแวดล้อม
มันขึ้นอยู่กับ CPU และปริมาณงานเป็นอย่างมากตามที่คนอื่นพูด
ประสิทธิภาพที่วัดได้บนโปรเซสเซอร์Intel®Xeon® MP พร้อมเทคโนโลยี Hyper-Threading แสดงประสิทธิภาพที่เพิ่มขึ้นถึง 30% สำหรับการวัดประสิทธิภาพแอพพลิเคชันเซิร์ฟเวอร์ทั่วไปสำหรับเทคโนโลยีนี้
(มันดูค่อนข้างอนุรักษ์นิยมสำหรับฉัน)
และมีอีกกระดาษอีกต่อไป (ที่ผมไม่ได้อ่านทั้งหมดของยัง) กับตัวเลขเพิ่มเติมได้ที่นี่ สิ่งที่น่าสนใจอย่างหนึ่งที่นำออกมาจากบทความนั้นคือการทำไฮเปอร์เธรดอาจทำให้เรทช้าลงสำหรับงานบางอย่าง
สถาปัตยกรรม Bulldozer ของเอเอ็มอาจจะน่าสนใจ พวกเขาอธิบายแต่ละแกนว่ามีประสิทธิภาพ 1.5 แกน มันเป็น hyperthreading หรือ sub-core มาตรฐานที่รุนแรงมากขึ้นอยู่กับว่าคุณมั่นใจในประสิทธิภาพที่น่าจะเป็นอย่างไร ตัวเลขในชิ้นส่วนนั้นแนะนำให้ใช้ความเร็วในการแสดงความคิดเห็นระหว่าง 0.5x ถึง 1.5x
ในที่สุดประสิทธิภาพก็ขึ้นอยู่กับระบบปฏิบัติการ หวังว่าระบบปฏิบัติการจะส่งกระบวนการไปยังCPU จริงตามความต้องการไปยังไฮเปอร์เธรดที่ปลอมตัวเป็น CPU เท่านั้น ไม่อย่างนั้นในระบบดูอัลคอร์คุณอาจมีซีพียูไม่ทำงานหนึ่งอันและคอร์ที่ยุ่งมากโดยมีสองเธรด ฉันดูเหมือนจะจำได้ว่าสิ่งนี้เกิดขึ้นกับ Windows 2000 แต่แน่นอนว่าระบบปฏิบัติการที่ทันสมัยทั้งหมดสามารถใช้งานได้อย่างเหมาะสม