คำถามที่ดีหรืออย่างน้อยหนึ่งคำตอบที่น่าสนใจ ส่วนหนึ่งของคำตอบนี้เป็นภาพโลกที่ซีพียูสามารถปรับขนาดได้อย่างมีประสิทธิภาพในความกว้างแทนด้วยหลายแกนที่แยกจากกัน ใบอนุญาต / รุ่นราคาจะแตกต่างกัน!
ที่เหลืออธิบายว่าทำไมพวกเขาถึงทำไม่ได้ สรุป:
- ค่าใช้จ่ายของแกนหลายขนาดใกล้เคียงกับเชิงเส้น
- ค่าใช้จ่ายของการขยายไปป์ไลน์ซูเปอร์คาร์ 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 จะเป็นความท้าทายที่ยิ่งใหญ่
หากเป็นไปได้ทุกที่ที่อยู่ใกล้กับอำนาจและงบประมาณพื้นที่เดียวกัน (เช่นต้นทุนการผลิต) เพื่อสร้างซีพียูดังกล่าวใช่ผู้ขายซีพียูจะสร้างพวกเขาในแบบนั้น
โดยเฉพาะคอร์เพิ่มเติมหรือคอร์ที่กว้างขึ้น? ส่วนสำหรับพื้นหลังที่จำเป็นในการเข้าใจคำตอบนี้ มันเริ่มง่ายด้วยวิธีการทำงานของซีพียูที่เรียงลำดับตามลำดับจากนั้นก็จะยิ่งสูง (คำแนะนำหลายต่อนาฬิกา) จากนั้นอธิบายวิธีที่เราชนกำแพงพลังงานรอบ ๆ ยุค 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" ที่ให้คุณกำหนดค่าความกว้างการดำเนินการสูงสุดสำหรับโค้ดที่รันบนแกนตรรกะนั้น (จินตนาการอีกครั้งถึงโลกที่ซีพียูจะขยายความกว้างไปป์ไลน์แทนที่จะเป็นหลายคอร์แยกกัน)