ทำไมไม่สร้างซีพียูคอร์ตัวใหญ่? [ปิด]


25

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

ตัวอย่างเช่นเกมแทบจะไม่เคยใช้มากกว่าสี่แกน การจำลองทางวิทยาศาสตร์และวิศวกรรมเช่น Ansys หรือ Fluent มีราคาตามจำนวนคอร์ที่พีซีทำงานอยู่ดังนั้นคุณจ่ายมากขึ้นเพราะคุณมีแกนเพิ่มเติม แต่ข้อดีของแกนเพิ่มเติมกลายเป็นแย่กว่า 16 คอร์ แต่คุณมี 64 แกนเหล่านี้ เวิร์คสเตชั่ ... มันเป็นการสิ้นเปลืองเงินและพลังงาน มันจะดีกว่าที่จะซื้อเครื่องทำความร้อน 1500 W สำหรับฤดูหนาวราคาถูกกว่ามาก

ทำไมพวกเขาไม่สร้างซีพียูด้วยแกนใหญ่เพียงแกนเดียว?

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


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท ข้อสรุปใด ๆ ที่มาถึงควรได้รับการแก้ไขกลับเข้าไปในคำถามและ / หรือคำตอบใด ๆ
Dave Tweed

คุณอาจสนใจในบทความนี้: gotw.ca/publications/concurrency-ddj.htm
lvella

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

คำตอบ:


93

ปัญหาอยู่ที่การสันนิษฐานว่าผู้ผลิตซีพียูสามารถเพิ่มทรานซิสเตอร์ได้มากขึ้นเพื่อทำให้ซีพียูแกนเดียวมีประสิทธิภาพมากขึ้นโดยไม่เกิดผล

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

  1. ทำให้แกนทำงานด้วยความถี่สัญญาณนาฬิกาที่สูงขึ้น - ปัญหาเกี่ยวกับสิ่งนี้คือเราได้ตีข้อ จำกัด ของสิ่งที่เราสามารถทำได้แล้ว

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

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

    เราถูก จำกัด ด้วยฮาร์ดแวร์ภายนอก - ส่วนใหญ่แรม เพื่อให้ CPU เร็วขึ้นคุณต้องเพิ่มแบนด์วิดท์หน่วยความจำโดยรันเร็วขึ้นหรือเพิ่มความกว้างของบัสข้อมูล


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

    สิ่งนี้กำลังดำเนินการกับตัวประมวลผล Complex Instruction Set (CISC) ดูสิ่งต่างๆเช่น SSE2, SSE3 ซีพียูแกนเดี่ยวในวันนี้มีพลังมากกว่าซีพียูหลักตั้งแต่เมื่อ 10 ปีที่แล้วแม้ว่าจะทำงานด้วยความถี่สัญญาณนาฬิกาเดียวกัน

    ปัญหาคือเมื่อคุณเพิ่มคำแนะนำที่ซับซ้อนมากขึ้นคุณจะเพิ่มความซับซ้อนมากขึ้นและทำให้ชิปใหญ่ขึ้น ผลที่ตามมาก็คือ CPU จะทำงานช้าลง - ความถี่สัญญาณนาฬิกาที่ลดลงเมื่อการส่งสัญญาณล่าช้าขึ้น

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

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


  1. ทำให้ซีพียูขนานมากขึ้น - แทนที่จะพยายามทำสิ่งใดสิ่งหนึ่งได้เร็วขึ้นแทนที่จะทำหลายอย่างพร้อมกัน หากงานที่คุณทำอยู่นั้นปล่อยให้ตัวเองทำงานหลาย ๆ อย่างในเวลาเดียวกันคุณต้องการซีพียูตัวเดียวที่สามารถทำการคำนวณได้หลายคำสั่ง (Single Instruction Multiple Data (SIMD)) หรือมี CPU หลายตัวที่แต่ละตัวสามารถทำได้ การคำนวณ

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

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

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


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท ข้อสรุปใด ๆ ที่มาถึงควรได้รับการแก้ไขกลับเข้าไปในคำถามและ / หรือคำตอบใด ๆ
Dave Tweed

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

1
สำหรับคำตอบที่แม่นยำยิ่งขึ้นอ่านsciencedirect.com/topics/computer-science/…
Tony Stewart Sunnyskyguy EE75

37

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

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

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

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

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


4
หาก / เมื่อผลตอบแทนดีขึ้นและผลิตชิปที่ทำงานได้เต็มที่มากกว่าความต้องการของตลาดผู้ขายมักจะเริ่มหลอมรวมแกน / แคชบางส่วนและ / หรือใช้ชิปเหล่านี้ที่ SKU ความถี่ต่ำแทนที่จะปรับโครงสร้างราคาเพื่อให้สูง ชิปปลายค่อนข้างถูกกว่า ด้วย GPUs / การ์ดกราฟิกที่คุณเคยสามารถปลดล็อคหน่วย shader ที่ปิดการใช้งานบนการ์ดบางตัวที่มีแฮ็คเฟิร์มแวร์เพื่อดูว่าคุณโชคดีและมีการ์ดที่ถูกปิดการใช้งานเฉพาะสำหรับการแบ่งส่วนตลาดไม่ใช่ข้อบกพร่องจริง
Peter Cordes

4
Intel ได้ผลิตแม่พิมพ์แบบ dual-core สำหรับชิปบางตัว ด้วย SKU มือถือ ULV (แรงดันไฟฟ้าต่ำมาก) เป็นแบบ dual-core ทำให้มี quad-core ที่มีข้อบกพร่องไม่เพียงพอและพื้นที่แม่พิมพ์ที่มีขนาดเล็กลง (โดยเฉพาะอย่างยิ่งกับ iGPU แบบตัดลง) ทำให้ชิปแบบ dual-core ทำงานต่อเวเฟอร์ กว่าหลอมรวม quad-core die en.wikichip.org/wiki/intel/microarchitectures/…มีภาพช็อตของ Sandybridge ขนาด 131 มม. ²แบบดูอัลคอร์ + กราฟิก GT1, ขนาด 149 มม. ²กราฟิกแบบ dual-core + GT2, 216 มม. ² + GT2 ยังคงมีห้องพักที่จะให้ข้อบกพร่องในแคช ฯลฯ
ปีเตอร์ Cordes

และข้อบกพร่อง (บางส่วน) ในส่วนของหน่วย FMA นั้นสามารถจัดการได้โดยการหลอมรวมและขายเป็นชิป Celeron หรือ Pentium (ไม่มี AVX ดังนั้นเวกเตอร์ 128 บิตเท่านั้น) แม้แต่ชิป Skylake หรือ Coffee Lake Pentium ที่ทันสมัยยังขาด AVX . หน่วย SIMD FMA ประกอบขึ้นเป็นเศษส่วนที่เหมาะสมของแกน (และเรียกใช้ตัวเลือก SIMD อื่น ๆ นอกเหนือจากคณิตศาสตร์ FP รวมถึงการเปลี่ยนเลขจำนวนเต็มและการเปลี่ยนจำนวนเต็ม) ดังนั้นฉันจะไม่แปลกใจถ้าหน่วย FMA 2x 256 บิตสามารถแมปกับ 2x 128- บิตที่ใช้ 2 ชิ้นใดก็ได้ที่ยังใช้งานได้ ด้วย Skylake Xeon ยังมี SKU ที่ลดปริมาณงาน AVX512 FMA (1 FMA ที่ทำงานเพียง 512 บิต)
Peter Cordes

@PeterCordes หากผลตอบแทนดีผู้ขายจะนำความหนาแน่นที่สูงขึ้นและ / หรืออัตรานาฬิกาที่สูงขึ้น (และอัตราข้อบกพร่องที่สูงขึ้น) ออกมาออกแบบจนกว่าอัตราข้อบกพร่องจะกลับไปที่จุดที่พวกเขาสามารถปิดการใช้งานแกนกลางและ / หรือชิป จะขายลดราคา ..
Monty Harder

@MontyHarder: นั่นเป็นเรื่องจริง แต่การตรวจสอบเงินและค่าใช้จ่ายและสายการผลิตที่มีอยู่จะทำให้การออกแบบที่มีอยู่ในขณะที่ แต่ใช่ตัวอย่าง Intel บางอย่างของสิ่งที่คุณกำลังพูดถึงคือHaswell Refreshและการปรับแต่งต่างๆของ Skylake โดยทั่วไปไม่มีการเปลี่ยนแปลงทางสถาปัตยกรรมและการปรับปรุงเล็กน้อยสำหรับกระบวนการ 14nm ของพวกเขา (บางครั้งด้วย iGPU ใหม่) เช่นKaby Lakeจากนั้น Coffee Lake เป็นต้นเป็นขั้นตอน "การเพิ่มประสิทธิภาพ" ในจังหวะการทำงานปกติของ Intel
Peter Cordes

26

การพึ่งพาข้อมูล

มันค่อนข้างง่ายที่จะเพิ่มคำแนะนำเพิ่มเติมต่อนาฬิกาโดยการทำให้ชิป "กว้างขึ้น" - นี่เป็นวิธีการ "SIMD" ปัญหาคือว่ามันไม่ได้ช่วยกรณีใช้มากที่สุด

มีเวิร์กโหลดสองประเภทโดยประมาณเป็นอิสระและขึ้นอยู่กับ ตัวอย่างของเวิร์กโหลดอิสระอาจเป็น "กำหนดลำดับสองหมายเลข A1, A2, A3 ... และ B1, B2, ... ฯลฯ คำนวณ (A1 + B1) และ (A2 + B2) เป็นต้น" ปริมาณงานประเภทนี้พบได้ในคอมพิวเตอร์กราฟิกส์การประมวลผลเสียงการเรียนรู้ของเครื่องและอื่น ๆ สิ่งนี้ได้ถูกมอบให้กับ GPU เป็นจำนวนมากซึ่งได้รับการออกแบบมาเป็นพิเศษเพื่อจัดการกับมัน

เวิร์กโหลดที่ขึ้นต่อกันอาจเป็น "กำหนด A เพิ่ม 5 ลงไปและค้นหาในตารางรับผลลัพธ์และเพิ่ม 16 ลงไปดูในตารางอื่น"

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

การจัดการพลังงาน

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

การเขียนซอฟต์แวร์ใหม่เป็นวิธีเดียวที่จะส่งต่อ

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


2
ต้องการการอ้างอิงสำหรับ "ไม่สามารถเรียกใช้แกนทั้งหมดในเวลาเดียวกัน" นอกจากว่าคุณจะพิจารณาความเร็วสัญญาณนาฬิกาแบบ single-core max turbo ให้เป็นความเร็วสัญญาณนาฬิกา "ของจริง" ของ CPU ในความรู้สึกแบบคลาสสิก (ก่อนที่เราจะกระแทกกำแพงไฟฟ้าและความเร็วสัญญาณนาฬิกาถูก จำกัด ด้วยความล่าช้าในการแพร่กระจายของเส้นทางที่สำคัญ) ใช่ว่าเป็นเรื่องจริง แต่ในโลกสมัยใหม่มันสมเหตุสมผลมากกว่าที่จะดูที่ความเร็วสัญญาณนาฬิกาพื้นฐาน แกนที่แอ็คทีฟกำลังรันเวิร์กโหลดจำนวนมาก อะไรที่สูงกว่านั้นก็คือน้ำเกรวี่ที่คุณสามารถฉวยโอกาสใช้เมื่อขีด จำกัด พลังงาน / ความร้อนอนุญาต (เช่น Turbo ของ Intel)
Peter Cordes

1
แต่ในแง่ของพลังงานแม้กระทั่งนาฬิกาสูงสุดของคอร์เดียวจะถูก จำกัด โดย thermals moreso มากกว่าความล่าช้าในการแพร่กระจาย (แม้ว่าอาจจะมีการเลือกขอบเขตของขั้นตอนไปป์ไลน์ดังนั้นคุณจึงใกล้เคียงกับขีด จำกัด นั้นที่เป้าหมายสูงสุดเทอร์โบ) และแรงดันไฟฟ้าก็เป็นตัวแปรเช่นกัน: กำลังที่แย่กว่านั้น ดังนั้นมันไม่สมเหตุสมผลที่จะพิจารณา single-core max turbo เนื่องจากสิ่งที่คุณ "ควร" สามารถเรียกใช้คอร์ทั้งหมดได้เนื่องจากขีด จำกัด นั้นมาจากพลังงาน
Peter Cordes

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

ใช่พวกเราทุกคนใช้ประสิทธิภาพของเธรดเดี่ยว 8x แทนการใช้ซีพียู 8-core ถ้าทำได้ (ด้วย SMT เพื่อให้สามารถรันเวิร์กโหลดแยกกันอย่างเป็นธรรมชาติโดยไม่มีบริบทเปลี่ยนค่าใช้จ่ายได้ดูคำตอบของฉัน :) แกนประมวลผลกว้างพิเศษที่สมมุติขึ้นน่าจะสามารถนาฬิกาตัวเองได้เร็วขึ้นเมื่อเวิร์กโหลดทำให้แผงลอยเยอะ ทรานซิสเตอร์ในหน่วย SIMD FMA ขับเคลื่อนขึ้นและเปลี่ยนทุกนาฬิกา (การ gating พลังงานภายในแกนเดียวยังเป็นกุญแจสำคัญที่จะไม่ละลายที่นาฬิกาสูง; en.wikipedia.org/wiki/Dark_silicon ) ดังนั้นการมีแกนกว้างเดี่ยวจึงไม่ทำให้สิ่งนี้แตกต่าง
Peter Cordes

แม้ว่าคุณจะมีประเด็นที่ประสิทธิภาพแบบเธรดเดียวที่เราเห็นในซีพียูปัจจุบันนั้นดีกว่าถ้าพวกเขาถูก จำกัด ความเร็วนาฬิกาที่พวกเขาสามารถรักษาแกนทั้งหมดไว้พร้อมกันแม้กับภาระงานที่แย่ที่สุด ie Turbo เป็นกุญแจสำคัญโดยเฉพาะอย่างยิ่งสำหรับชิ้นส่วนที่มี TDP ต่ำเช่นชิปแล็ปท็อป ( เหตุใด CPU ของฉันจึงไม่สามารถรักษาประสิทธิภาพสูงสุดไว้ใน HPC ): โดยปกติแล้วจะเป็นอัตราส่วนขนาดใหญ่ระหว่างพื้นฐานและเทอร์โบสูงสุดซึ่งแตกต่างจากชิปเดสก์ท็อป เช่น i7-6700k Skylake เป็นฐาน 4GHz, เทอร์โบแบบ single-core 4.2GHz (ไม่มีการโอเวอร์คล็อก; สามารถทำได้สูงกว่าด้วย 95W TDP)
Peter Cordes

20

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

ปัญหาคือสมมติฐานที่ไม่ถูกต้อง (ชั่วคราว) คุณสามารถรับพลังการประมวลผลได้มากขึ้นด้วยการทำให้ตัวประมวลผลตัวหนึ่งทำการคำนวณได้มากขึ้น Intel และ AMD พบวิธีที่จะเพิ่มความเร็วสัญญาณนาฬิกาให้สูงขึ้นและอย่างที่คุณพูดมันเป็นวิธีที่ง่ายกว่าในการเก็บทุกอย่างไว้ในโปรเซสเซอร์เดียว ผลก็คือจนถึงกลางปี ​​2000 โปรเซสเซอร์แบบ single-core ที่รวดเร็วเป็นเจ้าของตลาด Inmos เสียชีวิตในช่วงต้นยุค 90 และประสบการณ์ทั้งหมดของพวกเขาก็ตายไปกับพวกเขา

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

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


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท ข้อสรุปใด ๆ ที่มาถึงควรได้รับการแก้ไขกลับเข้าไปในคำถามและ / หรือคำตอบใด ๆ
Dave Tweed

20

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

ที่เหลืออธิบายว่าทำไมพวกเขาถึงทำไม่ได้ สรุป:

  • ค่าใช้จ่ายของแกนหลายขนาดใกล้เคียงกับเชิงเส้น
  • ค่าใช้จ่ายของการขยายไปป์ไลน์ซูเปอร์คาร์ 1 คอร์ของการขยับขยาย ~ กำลังสอง ซึ่งสามารถทำได้ด้วยกำลังเดรัจฉานมากพอจนถึงจุดต่อไป ประสิทธิภาพแบบเธรดเดียวมีความสำคัญมากสำหรับการใช้งานแบบโต้ตอบ (เรื่องความหน่วงแฝงจากปลายถึงปลายไม่เพียง แต่ปริมาณงาน) ดังนั้นซีพียูระดับไฮเอนด์ขนาดใหญ่ในปัจจุบันจึงต้องจ่ายราคานั้น เช่น Skylake (กว้าง 4), Ryzen (5 หรือ 6 กว้าง), และA12 ของ Apple (กว้าง 7 แกนสำหรับแกนใหญ่, 3 กว้างสำหรับแกนประหยัดพลังงานขนาดเล็ก)
  • จริงจังลดลงIPCผลตอบแทนจากการขยับขยายท่อเกิน 3 หรือ 4 กว้างแม้จะมีการดำเนินการออกจากเพื่อหาสิ่งที่ILP การพลาดจากสาขาและการพลาดแคชนั้นทำได้ยากและยังคงขัดขวางการส่งข้อมูลทั้งหมด
  • คุณไม่ได้พูดถึงความถี่แค่ IPC แต่ความถี่ในการปรับก็ยากเช่นกัน ความถี่ที่สูงขึ้นนั้นต้องการแรงดันไฟฟ้าที่สูงกว่าดังนั้นเครื่องชั่งไฟฟ้าที่มีความถี่ Cubed : ^1จากความถี่โดยตรงและ^2จากแรงดันไฟฟ้า (ตัวเก็บประจุจัดเก็บเครื่องชั่งพลังงานด้วย V ^ 2 และพลังงานแบบไดนามิกส่วนใหญ่ที่นอกเหนือจากกระแสรั่วไหลคือจากการชาร์จประจุเข้าไปในโหลด capacitive ของ FET Gates + สายไฟ)

    ประสิทธิภาพ = ความถี่คูณ IPC (ภายในสถาปัตยกรรมเดียวกันกว้างกว่า SIMD ช่วยให้คุณทำงานที่เหมือนกันได้โดยมีคำสั่งน้อยลงและ ISAs บางอย่างจะทึบกว่าคนอื่นเช่น MIPS มักใช้คำแนะนำเพิ่มเติมในการทำงานเดียวกันมากกว่า x86 หรือ AArch64)

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

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

หากแกนเดียวสามารถปรับขนาดได้อย่างมีประสิทธิภาพตามที่คุณต้องการเราจะมีระบบที่มี 1 ฟิสิคัลคอร์ต่อซ็อกเก็ตและSMT (เช่น HyperThreading) เพื่อให้พวกเขาทำหน้าที่เป็นแกนตรรกะหลายแกน เดสก์ท็อป / แล็ปท็อปทั่วไปจะมีแกนหลักเพียง 1 แกนเท่านั้นและเราจะไม่ดิ้นรนเพื่อขนานสิ่งที่ไม่ได้ขยายขนาดเชิงเส้นด้วยแกนเพิ่มเติม เช่นmake -j4ใช้ประโยชน์จากเซิร์ฟเวอร์หลายซ็อกเก็ตและ / หรือเพื่อซ่อน I / O latency บนเดสก์ท็อป (หรือบางทีเรายังคงพยายามขนานกันมากถ้าความกว้างของไพพ์ไลน์ปรับได้ง่าย แต่ IPC ไม่ได้ดังนั้นเราจึงต้องใช้เธรด SMT เพิ่มเติม) เคอร์เนลระบบปฏิบัติการของคุณยังคงต้องทำงานในทุกแกนตรรกะยกเว้นว่า CPU จะทำงานอย่างไร นำเสนอ SMT กับระบบปฏิบัติการแตกต่างกันมากดังนั้นอัลกอริธึมการจัดตารางเวลาแบบขนานและการล็อคจะยังคงต้องการอยู่ที่นั่น


Donald Knuth กล่าวในการสัมภาษณ์ปี 2008

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

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

ซีพียูหลายตัวช่วยลดค่าใช้จ่ายในการสลับบริบทเมื่อมีหลายโปรแกรมกำลังทำงาน (โดยให้พวกมันทำงานแบบขนานจริงๆแทนที่จะสลับระหว่างกันอย่างรวดเร็ว) มัลติทาสก์แบบ pre-emptive จะขัดขวางการทำงานของเครื่องจักรขนาดใหญ่เช่นซีพียูอาจจะต้องเจ็บปวดมากกว่าตอนนี้

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

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

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


การปรับอัตราส่วนประสิทธิภาพแบบเธรดเดียว

ฉันคิดว่าถ้าพวกเขาสร้าง 1 คอร์เทียบเท่ากับ 8 คอร์ซีพียูที่คอร์หนึ่งจะเพิ่มขึ้น 800% ใน IPC ดังนั้นคุณจะได้รับประสิทธิภาพการทำงานเต็มรูปแบบในทุกโปรแกรมไม่เพียง แต่ที่เหมาะสำหรับหลายแกน

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

แม้ว่าคุณจะอนุญาตให้มีการเพิ่มความถี่ (เนื่องจากเกณฑ์จริงคือการทำงานต่อวินาที, ไม่ทำงานต่อนาฬิกา), การทำให้ CPU เร็วขึ้นถึง 2x จะเป็นความท้าทายที่ยิ่งใหญ่

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

ดูไมโครโปรเซสเซอร์ที่ทันสมัยคำแนะนำ 90 นาที!

โดยเฉพาะคอร์เพิ่มเติมหรือคอร์ที่กว้างขึ้น? ส่วนสำหรับพื้นหลังที่จำเป็นในการเข้าใจคำตอบนี้ มันเริ่มง่ายด้วยวิธีการทำงานของซีพียูที่เรียงลำดับตามลำดับจากนั้นก็จะยิ่งสูง (คำแนะนำหลายต่อนาฬิกา) จากนั้นอธิบายวิธีที่เราชนกำแพงพลังงานรอบ ๆ ยุค P4 ซึ่งนำไปสู่การสิ้นสุดการปรับความถี่อย่างง่าย ๆ โดยเหลือเพียง IPC และทำงานได้มากขึ้นตามคำสั่ง (เช่น SIMD) เป็นเส้นทางข้างหน้าแม้จะมีทรานซิสเตอร์ขนาดเล็ก

ทำท่อกว้าง (คำแนะนำสูงสุดต่อนาฬิกา) โดยปกติเครื่องชั่งน้ำหนักในค่าใช้จ่ายเป็นความกว้างยืด ค่าใช้จ่ายนั้นจะถูกวัดในพื้นที่มรณะและ / หรือพลังงานสำหรับการตรวจสอบการพึ่งพาแบบขนานที่กว้างขึ้น (การตรวจจับอันตราย) และตัวกำหนดตารางเวลาที่ไม่ทำงานตามคำสั่งที่กว้างขึ้นเพื่อค้นหาคำแนะนำที่พร้อมใช้งาน และอ่านรายละเอียดเพิ่มเติม / พอร์ตเขียนไฟล์ลงทะเบียนและแคชของคุณถ้าคุณต้องการเรียกใช้คำแนะนำอื่น ๆ nopกว่า โดยเฉพาะอย่างยิ่งถ้าคุณมีคำแนะนำแบบ 3 อินพุตเช่น FMA หรือ add-with-carry (2 การลงทะเบียน + ธง)

นอกจากนี้ยังมีผลตอบแทนลดลง IPC สำหรับการทำซีพียูที่กว้างขึ้น ; ภาระงานส่วนใหญ่มี ILP ขนาดเล็ก / ระยะสั้น จำกัด (Instruction-Level Parallelism) สำหรับซีพียูที่จะใช้ประโยชน์ดังนั้นการทำให้คอร์กว้างขึ้นไม่เพิ่ม IPC (คำสั่งต่อนาฬิกา) หาก IPC ถูก จำกัด ให้น้อยกว่าความกว้างของ แกนหลักโดยกลุ่มพึ่งพา, สาขาพลาด, แคชคิดถึง, หรือแผงลอยอื่น ๆ แน่นอนว่าคุณจะได้รับความเร็วในลูปที่ไม่ได้ควบคุมด้วยการวนซ้ำแบบอิสระ แต่นั่นไม่ใช่สิ่งที่โค้ดส่วนใหญ่ใช้เวลาส่วนใหญ่ในการทำ คำสั่งเปรียบเทียบ / คำแนะนำสาขาคิดเป็น 20% ของคำสั่งผสมในรหัส "ทั่วไป" IIRC (ฉันคิดว่าฉันอ่านตัวเลขจาก 15 ถึง 25% สำหรับชุดข้อมูลต่างๆ)

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

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


เทคนิคปัจจุบันสำหรับการสร้างซีพียูในการดำเนินการที่ไม่เป็นไปตามคำสั่งสามารถค้นหา ILP ในช่วงสั้น ๆเท่านั้น ตัวอย่างเช่นขนาด ROB ของ Skylake คือ 224 fused-domain uops ตัวกำหนดตารางเวลาสำหรับ uops ที่ไม่ได้ดำเนินการคือ 97 unfused-domain ดูที่การทำความเข้าใจเกี่ยวกับผลกระทบของ lfence บนลูปที่มีห่วงโซ่การพึ่งพายาวสองรายการสำหรับการเพิ่มความยาวสำหรับกรณีที่ขนาดตัวกำหนดตารางเวลาเป็นปัจจัย จำกัด ในการแยก ILP ออกจากคำสั่งที่ยาว 2 เชนหากยาวเกินไป และ / หรือดูคำตอบทั่วไปและคำแนะนำเบื้องต้นเพิ่มเติมนี้)

ดังนั้นการค้นหา ILP ระหว่างลูปแบบยาวสองวงแยกกันไม่ใช่สิ่งที่เราสามารถทำได้กับฮาร์ดแวร์ การคอมไพล์ไบนารีรีคอมไพล์สำหรับลูปฟิวชั่นอาจเป็นไปได้ในบางกรณี แต่ฮาร์ดและไม่ใช่สิ่งที่ซีพียูสามารถทำได้จริงเว้นแต่ว่าพวกเขาไปเส้นทาง Transmeta Crusoe (เลเยอร์การจำลอง x86 ที่ด้านบนของ ISA ภายในที่แตกต่างกันในกรณีนั้น VLIW) แต่การออกแบบ x86 มาตรฐานที่ทันสมัยพร้อมด้วยแคช uop และตัวถอดรหัสที่ทรงพลังนั้นไม่ใช่เรื่องง่ายสำหรับรหัสส่วนใหญ่

และนอกเหนือจาก x86 ISAs ทั้งหมดที่ยังคงใช้งานอยู่นั้นค่อนข้างง่ายต่อการถอดรหัสดังนั้นจึงไม่มีแรงจูงใจสำหรับการคอมไพล์ซ้ำแบบไดนามิกนอกเหนือจากการปรับให้เหมาะสมทางไกล TL: DR: หวังว่าจะมีผู้รวบรวมมายากลที่สามารถเปิดเผย ILP เพิ่มเติมให้กับฮาร์ดแวร์ไม่ได้ผลสำหรับ Itanium IA-64และไม่น่าจะทำงานกับ CPU ที่มีความกว้างมากสำหรับ ISA ที่มีอยู่ด้วยรูปแบบอนุกรมของการดำเนินการ


หากคุณมี CPU แบบกว้างพิเศษคุณต้องการให้มันรองรับ SMT อย่างแน่นอนเพื่อให้คุณสามารถป้อนให้กับงานที่ต้องทำด้วยการรันหลายเธรด ILP ต่ำ

เนื่องจาก Skylake ปัจจุบันกว้าง 4 uops (และได้รับ IPC จริง 2 ถึง 3 uops ต่อนาฬิกาหรือใกล้เคียงกับ 4 ในรหัสความเร็วสูง), ซีพียู 8x ที่กว้างขึ้นจะเป็น 32 เท่า!

ความสามารถในการแกะสลักที่กลับเข้ามาใน 8 หรือ 16 ซีพียูตรรกะที่แบบไดนามิกใช้ทรัพยากรร่วมกันดำเนินการเหล่านั้นจะเป็นที่ยอดเยี่ยม: กระทู้ที่ไม่จนตรอกได้รับทั้งหมดแบนด์วิดธ์ front-end และ back-end ผ่าน

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

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


แต่เราไม่สามารถมีซีพียูในวงกว้างได้

เพื่อให้ได้ผ่านเราแทนที่จะต้องเปิดเผยขนานกับฮาร์ดแวร์ในรูปแบบของความเท่าเทียมด้ายระดับ โดยทั่วไปแล้วคอมไพเลอร์ไม่ค่อยรู้ว่าจะใช้เธรดเมื่อใด / อย่างไรนอกจากกรณีง่าย ๆ เช่นลูปขนาดใหญ่มาก (OpenMP หรือ gcc's -ftree-parallelize-loops) ยังคงต้องใช้ความฉลาดของมนุษย์ในการทำซ้ำโค้ดเพื่อให้งานที่เป็นประโยชน์ได้ผลในแบบคู่ขนานอย่างมีประสิทธิภาพเนื่องจากการสื่อสารระหว่างเธรดมีราคาแพงและการเริ่มต้นเธรด

TLP เป็นการขนานแบบหยาบหยาบซึ่งแตกต่างจาก ILP แบบละเอียดภายในการดำเนินการเธรดเดียวซึ่ง HW สามารถใช้ประโยชน์ได้


ซีพียูมุ่งเป้าไปที่เวิร์กโหลดแบบโต้ตอบ (เช่น Intel / AMD x86 และ Apple / ARM AArch64 ระดับไฮเอนด์คอร์) ทำการผลักดันผลตอบแทนที่ลดลงของการปรับสเกล IPC เนื่องจากประสิทธิภาพของเธรดเดียวยังคงมีค่ามากเมื่อความหน่วงแฝง ปัญหาขนานใหญ่อย่างหนาแน่น

ความสามารถในการรันเกม 8 สำเนาในแบบคู่ขนานที่ 15fps แต่ละเกมมีค่าน้อยกว่าการใช้งานหนึ่งสำเนาที่ 45fps ผู้ขายซีพียูรู้สิ่งนี้และนั่นเป็นเหตุผลว่าทำไมซีพียูสมัยใหม่จึงใช้การประมวลผลที่ไม่เป็นไปตามลำดับแม้ว่าจะมีค่าใช้จ่ายด้านพลังงานและพื้นที่ดาย (แต่ GPU ทำไม่ได้เพราะภาระงานของพวกมันขนานกันอย่างหนาแน่นแล้ว)

ฮาร์ดแวร์ Xeon Phi แบบหลายคอร์ของ Intel (Knight's Landing / Mill's Knight) เป็นจุดครึ่งทางที่น่าสนใจ: การประมวลผลที่ไม่เป็นไปตามคำสั่งและ SMT ที่ จำกัด เพื่อให้แกนประมวลผลกว้าง 2 แกนที่ป้อนด้วยคำสั่ง AVX512 SIMD แกนประมวลผลขึ้นอยู่กับสถาปัตยกรรม Silvermont พลังงานต่ำของ Intel (exec-out-order-order แต่มีหน้าต่างเรียงลำดับใหม่เล็กกว่าเล็กมาก Sandy-family ตระกูล Sandy และไปป์ไลน์ที่แคบกว่า)


BTW ทั้งหมดนี้เป็นมุมฉากเป็น SIMD การทำงานให้มากขึ้นต่อการเรียนการสอนจะช่วยได้เสมอหากเป็นไปได้สำหรับปัญหาของคุณ


แบบจำลองราคา

รูปแบบการกำหนดราคาซอฟต์แวร์นั้นได้รับการกล่าวถึงในปัจจุบันของฮาร์ดแวร์

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

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


2
"การเริ่มกระทู้มีราคาแพง" - นั่นไม่ใช่ความจริงที่ยาก มันเป็นสิ่งประดิษฐ์ของระบบปฏิบัติการที่ทันสมัยทั่วไป
MSalters

1
@Malters และแน่นอนโครงการวิจัยบางแห่งได้สำรวจว่ามันยอดเยี่ยมแค่ไหนที่จะทิ้งแนวทางนี้ เช่นเดียวกันกับ "ความเฉลียวฉลาดของมนุษย์ในการทำใหม่โค้ด" - มีวิธีการเขียนโค้ดที่เรียงซ้อนกันได้โดยธรรมชาติพวกเขาไม่ได้รับความนิยมมากในช่วงสองสามทศวรรษที่ผ่านมา ที่พวกเขาจะถูกนำมาใช้โดยทั่วไปคุณสามารถดูการปรับแนวนอนขนาดใหญ่ที่มีต้นทุนต่ำมาก ในความเป็นจริงจนถึงจุดที่การปรับขนาดแนวนอนเริ่มมีราคาถูกกว่าแนวตั้งในแอพพลิเคชั่นมากมาย มันหมายความว่าคุณต้องไม่ให้นักพัฒนาเลือก - ถ้าสถานการณ์บังคับมันก็ใช้ได้ดี: D
Luaan

11

ขอผมวาดอุปมา:

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

ดังนั้นหากคุณต้องการพิมพ์ให้เสร็จคุณจะต้องมีลิงมากขึ้น


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


7

คุณชี้ให้เห็นว่าซอฟต์แวร์จำนวนมากไม่ได้ใช้มากกว่าแกน (x) แต่นี่เป็นข้อ จำกัด ทั้งหมดที่นักออกแบบซอฟต์แวร์วางไว้ พีซีในบ้านที่มีหลายคอร์ยังคงเป็นเรื่องใหม่ (ish) และการออกแบบซอฟต์แวร์แบบมัลติเธรดก็ยากขึ้นด้วย API และภาษาดั้งเดิม

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

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

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


3
ความแตกต่างระหว่าง 1 กับหลายคอร์นั้นมีขนาดใหญ่มากในแง่ของการรับซอฟต์แวร์เพื่อใช้ประโยชน์ อัลกอริทึมและโปรแกรมส่วนใหญ่เป็นอนุกรม เช่นDonald Knuth ได้กล่าวว่าซีพียูแบบ multi-core ดูเหมือนนักออกแบบ HW คือ " พยายามส่งความผิดสำหรับการตายในอนาคตของกฎของ Moore ต่อผู้เขียนซอฟต์แวร์โดยการให้เครื่องที่ทำงานเร็วขึ้นในมาตรฐานที่สำคัญเพียงไม่กี่! "
Peter Cordes

น่าเสียดายที่ไม่มีใครมาด้วยวิธีที่จะทำให้คอร์กว้าง / เร็วเดียวรันโปรแกรมเธรดเดี่ยวทุกที่ใกล้เร็วที่สุดเท่าที่เราจะได้รับโค้ดขนานที่มีประสิทธิภาพเพื่อทำงานในหลายคอร์ แต่โชคดีที่ผู้ออกแบบซีพียูตระหนักว่าประสิทธิภาพของเธรดเดียวยังคงมีความสำคัญและทำให้แต่ละคอร์แต่ละคอมีขนาดใหญ่และมีประสิทธิภาพมากกว่าที่จะเป็นหากพวกเขาต้องการอัตราความเร็วที่แท้จริงสำหรับปัญหาคู่ขนาน (เปรียบเทียบ Skylake (กว้าง 4) หรือ Ryzen (กว้าง 5) เทียบกับแกนกลางของ Xeon Phi (Mill's Landing / Knight's Mill ตาม Silvermont + AVX512) (OoO exec ที่กว้าง 2 และ จำกัด )
Peter Cordes

2
อย่างไรก็ตามมีอย่างน้อย 2 คอร์มักจะมีประโยชน์สำหรับระบบปฏิบัติการมัลติทาสก์ แต่มัลติทาสกิ้งแบบ pre-emptive บนคอร์เดี่ยวที่มี 4x หรือ 8x เร็วเท่าซีพียูในปัจจุบันจะค่อนข้างดี สำหรับกรณีการใช้งานแบบอินเทอร์แอคทีฟจำนวนมากที่จะดีขึ้นมากหากเป็นไปได้ที่จะสร้างเลย / ด้วยงบประมาณพลังงานเดียวกัน (Dual Core ช่วยลดค่าใช้จ่ายในการสลับบริบทเมื่อมีงานหลายอย่างที่ต้องใช้เวลา CPU)
Peter Cordes

1
จริงทั้งหมด แต่มัลติคอร์ในอดีตมีราคาแพงกว่า ไม่มีเหตุผลมากมายที่จะออกแบบอัลกอริธึมแบบขนานด้านนอกของแอปพลิเคชั่นวิทยาศาสตร์ มีห้องจำนวนมากสำหรับการขนานแม้ว่าในอัลกอริทึมที่ต้องการการประมวลผลแบบอนุกรมเป็นส่วนใหญ่ แต่ IPC ยุคปัจจุบันไม่ยอดเยี่ยมและง่ายต่อการเลอะ ซึ่งโดยทั่วไปแล้วส่งผลให้เกิดข้อบกพร่องที่ยากต่อการค้นหาและแก้ไข แน่นอนว่า CPU ที่เร็วกว่า 4x จะน่าทึ่ง (แต่คุณยังคงต้องการหลายคอร์)
hekete

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

3

เหตุผลที่น่าสนใจที่สุดจากมุมมองทางประวัติศาสตร์คือการกระจายอำนาจ

หลังจาก Pentium IV, Intel พยายามติดตาม Tejas ชื่อโปรเซสเซอร์รุ่นต่อไปที่ควรจะทำงานในช่วง 4 GHz ถึง 12 GHz ปัญหาคือการวิ่งด้วยความเร็วนั้นทำให้เกิดความร้อนมากเกินไป

หลังจาก Tejas ถูกยกเลิกมันใช้เวลา Intel อีก 10 ถึง 15 ปีก่อนที่พวกเขาจะมีแกนประมวลผลที่ความเร็ว 4 GHz ในระดับความร้อนที่ยอมรับได้

ดูTejas และ Jayhawk

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

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

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

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

หากมีสิ่งใดตลาดประสิทธิภาพสูงกำลังจะย้ายไปสู่การประมวลผลแบบขนานมากขึ้นในรูปแบบของ FPGA เมื่อเร็ว ๆ นี้ Intel ได้ซื้อ Altera (ผู้ผลิต FPGA รายใหญ่อันดับสอง) และตอนนี้ขายแผงวงจรพร้อมตัวเร่งฮาร์ดแวร์ FPGA ซอฟต์แวร์สามารถโหลด FPGA ด้วยภาพในขณะใช้งานโดยใช้การเรียก API CPU จะป้อนข้อมูลลงใน FPGA และให้มันทำงานได้เกือบทั้งหมด ประเภทของแอปพลิเคชันโดยทั่วไปคือการเข้ารหัสวิดีโอ, AI, การเรนเดอร์, การค้นหาฐานข้อมูลเป็นต้น


นอกจากนี้โปรดทราบว่าโดยปกติจะมีเธรดหลายร้อยหรือหลายพันเธรดที่ทำงานพร้อมกันบนพีซี ไม่มีไม่ได้ทำงาน มีเธรดจำนวนมากที่มีอยู่บนเดสก์ท็อปสมัยใหม่ แต่เกือบทั้งหมดนั้นกำลังรอ I / O หรือตัวจับเวลาในเวลาที่กำหนด เช่นโหลดเฉลี่ย (ในนาทีสุดท้าย) บนเดสก์ท็อป Linux ของฉันปัจจุบันมีงาน 0.19 งานที่พร้อมจะใช้เวลา CPU ในช่วงเวลาใดก็ตาม หากฉันใช้การเข้ารหัสวิดีโอ x264 จะเริ่มต้นหลายเธรดสำหรับระบบปฏิบัติการเพื่อกำหนดตารางเวลาบนหลายคอร์
Peter Cordes

และ BTW, OP (ด้วยเหตุผลบางอย่าง) ละเว้นความถี่ทั้งหมดและถามเกี่ยวกับการปรับขนาด IPC (คำแนะนำต่อรอบสัญญาณนาฬิกา) ไม่ใช่ต่อวินาที สิ่งที่คุณพูดนั้นเป็นความจริง แต่พวกเขากำลังเสนอที่จะทำให้ซีพียูกว้างขึ้นไม่ใช่โอเวอร์คล็อกที่สูงขึ้น ฉันตอบไปแล้วว่าในคำตอบของฉันดังนั้นคำตอบของคุณที่อธิบายการขยายกำลังด้วยความถี่เป็นสิ่งที่ดียิ่ง +1
Peter Cordes

@PeterCordes ถูกต้องฉันไม่ได้ตั้งใจที่จะบอกว่ากระทู้ทั้งหมดดำเนินการในครั้งเดียวแน่นอนว่าผลัดกัน ขอบคุณสำหรับการชี้แจง
user4574

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

2

เพียงแค่ปัดเศษรูปภาพของสิ่งที่เกิดขึ้นทั้งหมดนี้ ...

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

และในบางเรื่องเช่นพีซีเกมนั้นมีประสิทธิภาพในการประมวลผลกราฟิกการ์ดมากกว่า Intel หรือ AMD CPU แบบมัลติคอร์


2
เรื่อง"... ขนานใหญ่อย่างหนาแน่น" : ถึงขนาดขนานกันเหรอ?
Peter Mortensen

1

โดยพื้นฐานแล้วการสูญเสียของ CMOS นั้นมีค่าเป็นทวีคูณ (^ 1.5) ตามสัดส่วนของความถี่และประสิทธิภาพของ CPU แบบขนานนั้นค่อนข้างน้อยกว่าเชิงเส้นตามสัดส่วนกับจำนวนของซีพียู

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

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

ไม่ใช่ขนาดของ CPU ที่ใหญ่กว่าที่ทำให้เร็วขึ้นสำหรับแอปพลิเคชั่นพีซีทั่วไปของ Intel / AMD แต่เป็นขนาดที่ลดลงจากความละเอียด lithographic และความจุเกตที่ลดลงซึ่งช่วยลดพลังงานพร้อมกับระดับย่อยและแรงดันไฟฟ้าหลัก

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

สำหรับคำตอบเพิ่มเติมทางวิทยาศาสตร์อ่านhttps://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption


-2

มัลติคอร์มักไม่ใช่มัลติคอร์ และแกนหลายแกนไม่ใช่มัลติคอร์

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

แกนการเรียนการสอนหลายตัวมีราคาถูกและง่ายต่อการควบคุมและนั่นเป็นเหตุผลว่าทำไมจึงเป็นความคิดที่ไม่ดีที่มีสถาปัตยกรรมแบบหลายทางที่หลายกิกะเฮิรตซ์


1
คุณหมายถึง "superscalar" หลายคำสั่งต่อนาฬิกาหรือไม่ ซีพียูแบบมัลติคอร์ส่วนใหญ่นั้นมีความเร็วสูงกว่า เช่น Ryzen กว้าง 5 นิ้ว ชิป AArch64 ระดับสูงของ Apple นั้นมีขนาด 6 หรือ 8 กว้าง มีผลไม้แขวนลอยต่ำจำนวนมากสำหรับซีพียู 2 หน้ากว้างเพื่อใช้ประโยชน์จากโค้ดส่วนใหญ่ดังนั้นจึงควรสร้างคอร์แต่ละคอร์อย่างน้อย 2 หน้ากว้างก่อนที่จะปรับไปยังหลายคอร์ที่แต่ละคนต้องการแคชส่วนตัวของพวกเขาเอง เช่นการ์ดประมวลผลแบบหลายแกน Xeon Phi ของ Intel มีคอร์ที่มีปัญหาแบบคู่จำนวนมาก) เช่นเดียวกันกับแกนสมาร์ทโฟน: แกนเล็ก ๆ มีความกว้างอย่างน้อย 2 ตัว ประสิทธิภาพของเธรดเดี่ยวนั้นสำคัญ!
Peter Cordes

1
หรือคุณหมายถึงdl.acm.org/citation.cfm?id=224451 - งานวิจัยเกี่ยวกับสิ่งที่เรียกว่าแกน "Multiscalar" ที่มองหา ILP ในช่วงที่มีขนาดใหญ่กว่าในกราฟควบคุมโฟลว์ของโปรแกรมระดับสูงโดยใช้ การรวมกันของ HW และ SW ซีพียูหลัก ๆ ที่เราใช้ในเดสก์ท็อปและสมาร์ทโฟนนั้นไม่ได้เป็นเช่นนี้พวกมันเป็นเพียงซุปเปอร์สตาร์ธรรมดาที่มีการประมวลผลที่ไม่เป็นไปตามลำดับโดยใช้อนุกรม ISA ที่อ้างว่าเรียกใช้
Peter Cordes

ขอบคุณ afaik ความคิดเบื้องหลัง scalar arch คือการวัดความร้อนหลังชุดคำสั่งที่รู้จักหรือที่กำหนดไว้ล่วงหน้า (กรณีของ AVX) <br/> การคำนวณสถาปัตยกรรมปัจจุบันเทียบกับความร้อนถูกไตร่ตรองไม่สามารถคาดเดาได้ สิ่งนี้ช่วยเพิ่มความไม่น่าจะเป็นไปได้ของมัลติคอร์ที่สามารถทำงานที่ความถี่ขนาดใหญ่เนื่องจากความสามารถในการดำเนินการในช่วงเวลา / ความร้อนในอุดมคติไม่สามารถคำนวณได้ นั่นคือทั้งหมดที่ฉันรู้ ฉันกำลังขุดเวกเตอร์แมชชีนเพื่อจุดประสงค์นี้ในการทำความเข้าใจฟิสิกส์ของ "multiscalars" กรณีเป็น xeon / phy ตามโค้งความร้อนในอุดมคติเหมือนซีพียูโบราณได้ เสริมสร้างประสบการณ์ของลูกค้า
machtur

ชุดคำสั่ง SIMD เช่น AVX เป็นวิธีที่จะทำให้การทำงานผ่านไปป์ไลน์มากขึ้นโดยไม่ต้องทำให้ไปป์ไลน์ทั้งหมดกว้างขึ้นเพียงแค่หน่วยดำเนินการ ตัวอย่างเช่น Skylake สามารถเรียกใช้ 3 vpaddd ymm0, ymm1, ymm2คำแนะนำต่อนาฬิกาแต่ละคนดำเนินการเพิ่ม 8 จำนวน 32 บิตบรรจุ 8 ดังนั้นจำนวนเต็ม 24 จึงเพิ่มต่อนาฬิกา แต่เครื่องจักรการดำเนินการที่ล้าสมัย "เท่านั้น" จะต้องติดตาม 3 คำแนะนำในการบิน นั่นมากที่ถูกกว่าการสร้างกว่า CPU ที่สามารถทำงานได้ 24 add eax, edxคำสั่งต่อนาฬิกา SIMD นั้นเป็นมุมฉากกับความกว้างของท่อ
Peter Cordes

Skylake เป็นกรณีที่ดีของการเพิ่มประสิทธิภาพต่อรอบสัญญาณนาฬิกา ตัวแปรหลากหลายไม่ได้เป็นของพวกเขาซึ่งเป็นกรณีที่น่าสนใจของการเพิ่มประสิทธิภาพบัสภายในเนื่องจาก skylakes ผสานรวมการถ่ายโอน Xeon ดั้งเดิมเข้ากับกระบวนการ SIMD ฉันถือว่าหนึ่งคอร์ใหญ่จะรวมการถ่ายและการคำนวณในไม่กี่รอบวิธี (เช่น) ฟีนอลทำเพื่อ AVX มันเป็นวิธีที่การคำนวณแบบบูรณาการไปข้างหน้ากับพลังงานที่จำเป็นสำหรับการดำเนินการบล็อกภายใน เหมือนกับคำแนะนำสั้น ๆ หลายอย่างเช่นใน Gpu-like กับแกน "virtual" หลายตัวที่คล้ายกับส่วนเพิ่มเติมของ Nehalem
เครื่อง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.