ทำไมเรายังคงใช้ซีพียูแทน GPU?


373

สำหรับฉันแล้วดูเหมือนว่าการคำนวณในสมัยนี้จะใช้ GPU เป็นจำนวนมาก เห็นได้ชัดว่ามีกราฟิกอยู่ที่นั่น แต่ใช้ CUDA และเช่น AI, hashing algorithm (คิดว่า bitcoin) และอื่น ๆ ก็ทำบน GPU เช่นกัน ทำไมเราไม่สามารถกำจัด CPU และใช้ GPU ด้วยตัวเองได้? อะไรทำให้ GPU เร็วกว่าซีพียูมาก?


3
ฉันจะรู้ได้อย่างไรว่าคำตอบใดมีข้อมูลที่ถูกต้อง ฉันควรรอจนกว่าคนอื่นจะตอบขึ้น / ลงคะแนน? ฉันคิดว่าฉันรีบร้อนเกินไปที่จะรับคำตอบ: O
ell

14
มีบางคำตอบล่าสุด @ell ในขณะนี้ซึ่งไม่มี "ข้อมูลที่ผิด" พวกเขากำลังค่อยๆขึ้นไปสู่จุดสูงสุดด้วยคะแนนโหวตที่สูงขึ้นเนื่องจากกลไกตลาดที่มีประสิทธิภาพของ StackExchange ที่ออกแบบมาอย่างเยี่ยมยอด ;-) ฉันขอแนะนำให้รออีกสักครู่ก่อนที่จะตอบรับ ดูเหมือนว่าคุณทำอย่างนั้นอย่างระมัดระวัง นี่เป็นคำถามที่ดีโดยวิธีการ อาจดูเหมือนชัดเจน แต่ก็ไม่ได้ทั้งหมด ขอบคุณสำหรับการถาม!
Ellie Kesselman

124
เหมือนถามว่า "ถ้าโบอิ้ง 747 เร็วขึ้นและประหยัดน้ำมันมากขึ้นทำไมเรายังขับรถยนต์"
vartec

7
ไม่เพราะไม่ใช่ RISC เทียบกับ CISC มันเป็นหนึ่งในพื้นฐานวิทยาศาสตร์คอมพิวเตอร์อื่น ๆ ซึ่งปลอมตัวเล็กน้อย มันคือ"ทำไมเราต้องลดการทำงานจากโปรเซสเซอร์กลางไปยังโปรเซสเซอร์ I / O .
JdeBP

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

คำตอบ:


388

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


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

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

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

GPU รุ่นใหม่มีความสามารถในการปฏิบัติการเวกเตอร์และเลขคณิตทศนิยมด้วยบัตรล่าสุดที่สามารถจัดการตัวเลขจุดลอยตัวที่มีความแม่นยำสองเท่า เฟรมเวิร์กเช่น CUDA และ OpenCL ช่วยให้สามารถเขียนโปรแกรมสำหรับ GPU ได้และลักษณะของ GPU ทำให้พวกเขาเหมาะสมที่สุดสำหรับการดำเนินการแบบขนานได้สูงเช่นในการคำนวณทางวิทยาศาสตร์ คำนวณคลัสเตอร์ในขณะที่เอ็นเทสลาซูเปอร์คอมพิวเตอร์ส่วนบุคคล ผู้บริโภคที่มี GPU ที่ทันสมัยที่มีประสบการณ์กับ Folding @ home สามารถใช้พวกเขาเพื่อสนับสนุนลูกค้า GPUซึ่งสามารถจำลองการพับโปรตีนด้วยความเร็วสูงมากและมีส่วนร่วมในการทำงานมากขึ้นในโครงการ (โปรดอ่านคำถามที่พบบ่อยก่อนโดยเฉพาะที่เกี่ยวข้องกับ GPU) GPU สามารถเปิดใช้งานการจำลองทางฟิสิกส์ที่ดีขึ้นในวิดีโอเกมโดยใช้ PhysX เร่งการเข้ารหัสและถอดรหัสวิดีโอและทำงานอื่น ๆ ที่เน้นการคำนวณ เป็นประเภทของงานเหล่านี้ที่ GPUs เหมาะสมที่สุดสำหรับการทำงาน

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

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


39
เช่นเดียวกับคำตอบนี้ฉันคิดว่าเหตุผลหลักคือเราไม่มีภาษาโปรแกรมสตรีมหลักที่ดีในการจัดการกับสถาปัตยกรรมแบบขนานเช่นนี้ เราได้ต่อสู้มานานหลายทศวรรษเพื่อพัฒนาโปรแกรมหลายเธรดและผู้คนยังคงเรียกร้อง แม้ว่าซีพียูและ GPU แบบ multi-core จะเป็นความจริงและเราจะต้องมีกระบวนทัศน์การเขียนโปรแกรมใหม่เพื่อจัดการกับสิ่งนี้
Soren

เป็นที่น่าสังเกตว่า Intel ได้ทำงานเกี่ยวกับสถาปัตยกรรมLarrabee (นานเกินไป) ซึ่งเป็นชิปที่มีแกน x86 จำนวนมาก
Chris S

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

3
"เราไม่มีภาษาโปรแกรมสตรีมหลักที่ดีในการจัดการกับสถาปัตยกรรมแบบขนานเช่นนี้" - Haskell, OCaml, Scheme, F #, Erlang และโปรแกรมการทำงานอื่น ๆ ที่ค่อนข้างดีจัดการกับหลายเธรดได้ดีมาก ทั้งหมดที่ฉันกล่าวถึงเป็นหลัก
BlueRaja - Danny Pflughoeft

1
@BlueRaja - เรารู้ภาษาเหล่านี้ความหมายของสตรีมหลักของคุณจะต้องแตกต่างจากของฉัน :-)
Soren

252

อะไรทำให้ GPU เร็วกว่าซีพียูมาก?

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

GPU เป็น CPU ที่มีวัตถุประสงค์พิเศษออกแบบมาเพื่อให้คำสั่งเดียวทำงานได้มากกว่าบล็อกข้อมูลขนาดใหญ่ (SIMD / Single Instruction Multiple Data) ทั้งหมดนี้ใช้การทำงานแบบเดียวกัน การทำงานในบล็อกของข้อมูลนั้นมีประสิทธิภาพมากกว่าการทำงานกับเซลล์เดี่ยวในแต่ละครั้งเพราะลดค่าใช้จ่ายในการถอดรหัสคำแนะนำอย่างไรก็ตามการทำงานในบล็อกขนาดใหญ่หมายความว่ามีหน่วยการทำงานแบบขนานมากขึ้นดังนั้นจึงใช้ทรานซิสเตอร์มากขึ้น เพื่อใช้คำสั่ง GPU เดี่ยว (ก่อให้เกิดข้อ จำกัด ทางกายภาพขนาดใช้พลังงานมากขึ้นและสร้างความร้อนมากขึ้น)

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

เหตุผลที่เรายังใช้ซีพียูไม่ได้เพราะ x86 เป็นราชาแห่งสถาปัตยกรรมซีพียูและ Windows เขียนขึ้นสำหรับ x86 เหตุผลที่เรายังคงใช้ซีพียูเป็นเพราะงานประเภทที่ระบบปฏิบัติการจำเป็นต้องทำคือการตัดสินใจ ทำงานได้อย่างมีประสิทธิภาพมากขึ้นในสถาปัตยกรรมของ CPU ระบบปฏิบัติการต้องการดูข้อมูลประเภทต่างๆ 100s และทำการตัดสินใจต่าง ๆ ซึ่งขึ้นอยู่กับซึ่งกันและกัน งานประเภทนี้ไม่ได้ขนานกันอย่างง่าย ๆ อย่างน้อยก็ไม่ได้อยู่ในสถาปัตยกรรม SIMD

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


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

2
+1 สำหรับคำตอบนี้เป็นคำตอบที่ดีที่สุด ทั้งคำตอบนี้และคำตอบที่ยอมรับนั้นถูกต้อง แต่คำตอบนี้อธิบายได้ชัดเจนกว่า

ฉันประหลาดใจที่ไม่มีใครในชุดข้อความนี้ได้กล่าวถึงค่าใช้จ่ายในการส่งข้อมูลไปยัง GPU - แบนด์วิดธ์ที่ จำกัด ผ่านบัส PCI-Express ทำให้การทำงานแบบขนานบน GPU ช้าลงกว่าที่เคยทำบนซีพียูอย่างมากมาย กรณีง่ายๆหนึ่งกรณีสามารถเห็นได้ว่าขนาดของ FFT ที่แตกต่างกันนั้นมีความแตกต่างอย่างมีนัยสำคัญในประสิทธิภาพของ GPU กับ CPU เนื่องจากค่าใช้จ่ายในการส่งข้อมูลการตั้งค่าบริบทอ่านผลลัพธ์ย้อนกลับ: stackoverflow.com/a/8687732/303612การดำเนินการขนาดเล็กสามารถดำเนินการในแคชบน CPU และแบนด์วิดท์หน่วยความจำนั้นเหนือกว่าสถาปัตยกรรม PCI-E ปัจจุบันอย่างมาก
Dr. Andrew Burnett-Thompson

1
@ Dr.AndrewBurnett-Thompson: นั่นเป็นเพราะมันไม่เกี่ยวข้องกับคำถาม ปัจจุบัน GPU ถือเป็นหน่วยประมวลผลเสริมนั่นเป็นสาเหตุที่การย้ายข้อมูลจาก / ไปยัง GPU เป็นสิ่งที่จำเป็นและมีราคาแพง หากเราถือว่า GPU เป็นหน่วยประมวลผลชั้นหนึ่งไม่จำเป็นต้องมีข้อมูลจอมพลระหว่างหน่วยความจำหลักและหน่วยความจำ GPU
Lie Ryan

1
ไม่มองโลกในแง่ดีไม่มีแบนด์วิดท์เป็นศูนย์ หากหน่วยประมวลผลที่มีสถาปัตยกรรม GPU ใช้การแสดงทั้งหมดไม่มีสิ่งใดที่ต้องเคลื่อนย้ายหน่วยความจำ GPU คือหน่วยความจำหลัก ไม่มีค่าใช้จ่ายในการโอนที่จะพูดคุยในตอนแรกเพราะไม่มีการถ่ายโอน นี่ไม่ใช่ข้อสันนิษฐาน APU ของ AMD ใช้สถาปัตยกรรม HSA (heterogenous system) กับหน่วยความจำหลักที่เป็นเอกภาพซึ่งช่วยให้ไม่มีการคัดลอกระหว่าง CPU และ GPU
Lie Ryan

75

GPU ขาด:

  1. หน่วยความจำเสมือน (!!!)
  2. หมายถึงการระบุอุปกรณ์อื่นนอกเหนือจากหน่วยความจำ (เช่นคีย์บอร์ดเครื่องพิมพ์ที่เก็บข้อมูลสำรองเป็นต้น)
  3. ขัดจังหวะ

คุณต้องมีสิ่งเหล่านี้เพื่อใช้งานระบบปฏิบัติการที่ทันสมัย

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

แก้ไข : โปรดทราบว่าการตอบสนองนี้ถูกเขียนขึ้นในปี 2011 - เทคโนโลยี GPU เป็นพื้นที่ที่เปลี่ยนแปลงตลอดเวลา สิ่งต่าง ๆ อาจแตกต่างกันมากขึ้นอยู่กับเมื่อคุณอ่านข้อความนี้: หน้า

* GPU บางตัวไม่ได้ช้าที่เลขคณิตความแม่นยำสองเท่าเช่นเส้น Quadro หรือ Tesla ของ NVidia (รุ่น Fermi หรือใหม่กว่า) หรือสาย FirePro ของ AMD (รุ่น GCN หรือใหม่กว่า) แต่สิ่งเหล่านี้ไม่ได้อยู่ในเครื่องผู้บริโภคส่วนใหญ่


@Cicada: คุณมีการอ้างอิงสำหรับสิ่งนั้นหรือไม่? ไม่ว่าในกรณีใด ๆ แม้ว่าจะเป็นจริงก็ตามแม้ว่าฮาร์ดแวร์ล่าสุดจะไม่ทำงานได้ดีในกรณีนี้ (เช่นจะไม่มีข้อได้เปรียบที่สมบูรณ์เกินกว่า CPU - และข้อเสียด้านการใช้พลังงาน)
Billy ONeal

3
ใช่อุปกรณ์ Fermi ตามที่คุณพูด (ด้วย CUDA 4.0 และ sm_20) รองรับการกระโดดทางอ้อม (และวิธีการเสมือน C ++, การสืบทอด ฯลฯ )
ผักกาดหอมโกรธ

544 GigaFLOPSจาก GPU อายุ $ 300 2 ปีช้าไหม
Ben Voigt

2
@Ben: คุณได้รับประสิทธิภาพแบบนั้นในแอปพลิเคชันแบบขนานข้อมูล การดำเนินการตามลำดับทั่วไปเป็น ballgame ที่แตกต่างกันโดยสิ้นเชิง (นั่นเป็นเพียงกับ 1600 แกนทั้งหมดในชิปที่ทำงานแบบขนานโดยพื้นฐานแล้วใช้คำสั่งเดียวกันซ้ำแล้วซ้ำอีก ... และแม้กระทั่งในทางทฤษฎีมากกว่าความสมบูรณ์แบบที่แท้จริง)
Billy ONeal

@Billy: แต่นั่นเป็นความช้าในบางคลาสของอัลกอริทึมไม่ใช่ความช้าในเลขคณิตความแม่นยำสองเท่า (ซึ่งเป็นสิ่งที่คุณอ้างสิทธิ์) (และซีพียูมักจะไม่ได้รับผลการทดสอบเกณฑ์มาตรฐานเช่นกัน)
Ben Voigt

37

ซีพียูเปรียบเสมือนพนักงานที่ทำงานเร็วมาก GPU เป็นเหมือนกลุ่มคนงานโคลนที่ไปอย่างรวดเร็ว แต่ทุกคนต้องทำสิ่งเดียวกันพร้อมเพรียงกัน (ยกเว้นว่าคุณสามารถมีโคลนบางตัวที่ไม่ทำงานถ้าคุณต้องการ)

คุณอยากให้นักพัฒนาคนใดคนหนึ่งเป็นซุปเปอร์ฟาสต์คนหนึ่งหรือโคลสฟาส 100 อันที่ไม่เร็วเท่าไหร่ แต่ทุกคนต้องทำสิ่งเดียวกันพร้อม ๆ กัน?

สำหรับการกระทำบางอย่างโคลนนั้นค่อนข้างดีเช่นกวาดพื้น - พวกเขาแต่ละคนสามารถกวาดมันได้

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


4
ฉันจะได้ ... ทั้งคู่ได้ไหม
Kevin Panko

22
@Kevin: ใช่ แต่คุณต้องการคอมพิวเตอร์ที่มีทั้งซีพียูและ GPU! ถ้าเพียงแค่มีสิ่งนั้น!
โจอาคิมซาวเออร์

3
การเปรียบเทียบที่ยอดเยี่ยม จะจำสิ่งนี้ได้
Mayo

23

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

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

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

หมายเหตุเล็กน้อยหากเป็นไปได้ที่จะทิ้งซีพียูและมีเพียง GPU คุณไม่คิดว่าเราจะเปลี่ยนชื่อหรือไม่ :)


ฉันคิดว่าซีพียูที่ทันสมัยส่วนใหญ่ได้รับการออกแบบมาเพื่อทำสิ่งที่ 2, 4 หรือ 8 ในครั้งเดียว
danielcg

@ danielcg25: และ GPU ที่ทันสมัยส่วนใหญ่ได้รับการออกแบบให้ทำ 256, 512, 1024 สิ่งในครั้งเดียว (GTX 680 มี1536 CUDA แกน) ซีพียูแต่ละคอร์แต่ละตัวมีแนวคิดที่แตกต่างกันไป แต่สิ่งนี้ไม่เป็นความจริงของ GPU
Phoshi

@ danielcg25: ฉันรู้ แต่ความคิดเห็นที่มีความเข้าใจผิดพื้นฐาน (แม้ว่าโดยเจตนา) ของคำตอบอาจเป็นอันตรายหากใครก็ตามที่อ่านมันโดยไม่ทราบหัวข้อแล้ว "การเป็นตูด" ในแง่นั้นไม่ได้เป็นที่น่าพอใจอย่างมากใน SE เพราะจะลดอัตราส่วนสัญญาณต่อสัญญาณรบกวน
Phoshi

ฉันแค่ให้ข้อมูลบางอย่าง คอมพิวเตอร์ส่วนใหญ่ในปัจจุบันมีความสามารถในการประมวลผล 2-8 สิ่งในเวลาเดียวกัน โปรเซสเซอร์บางตัวสามารถทำได้มากกว่านั้น มันยังไม่เข้าใกล้กับ GPU ที่ทำสิ่งต่าง ๆ ได้ 100s ในครั้งเดียว
danielcg

@ danielcg25: มันเป็นกระบวนการที่แตกต่างออกไปซึ่งเป็นคำถามที่เกี่ยวกับ ซีพียูแต่ละคอร์แยกออกจากกันอย่างมีประสิทธิภาพโดยทำงานกับกลุ่มข้อมูลและกระบวนการของตัวเอง ซีพียูแต่ละคอร์ทำงานที่แตกต่างกันแยกจากกันและไม่เพิ่มขึ้นเป็นเส้นตรง - octo-core ไม่ได้มีประโยชน์เป็นสองเท่าในขณะที่ควอดคอร์นั้นไม่ได้มีประโยชน์เป็นสองเท่า ในทางตรงกันข้ามคอร์ GPU นั้นทำงานเหมือนกันกับข้อมูลที่แตกต่างกัน เป็นที่ชัดเจนว่าซีพียูแบบมัลติคอร์อยู่ แต่นี้ไม่ได้เป็นสิ่งเดียวกัน
Phoshi

14

คุณถามจริงๆหรือเปล่าว่าทำไมเราถึงไม่ใช้ GPU เหมือนสถาปัตยกรรมใน CPU?

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

เราใช้สถาปัตยกรรมซีพียูที่แตกต่างกัน (มากกว่า GPU-ish) เช่นโปรเซสเซอร์Niagaraค่อนข้างทำงานหลายอย่าง SPARC T3จะรัน 512 เธรดพร้อมกัน


ทำไมต้องลงคะแนน
jkj

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

ตกลง. ลบส่วนสุดท้ายที่เป็นความคิดเห็นของฉันเกี่ยวกับระบบปฏิบัติการหลักที่สนับสนุนการขัดขวางการเปลี่ยนแปลงสถาปัตยกรรมใหม่ อาจไม่อยู่ในขอบเขตของคำตอบ
jkj

11

ฉันอาจถูกเข้าใจผิดอย่างน่ากลัวที่นี่และฉันกำลังพูดจากผู้มีอำนาจเพียงเล็กน้อยหรือไม่มีเลยในเรื่อง แต่นี่ไป:

  • ฉันเชื่อว่าหน่วยประมวลผล GPU แต่ละตัว ("core") มีพื้นที่ที่อยู่ที่ จำกัด มากเมื่อเทียบกับ CPU

  • หน่วยประมวลผล GPU ไม่สามารถจัดการกับการแตกแขนงได้อย่างมีประสิทธิภาพ

  • หน่วยดำเนินการ GPU ไม่สนับสนุนการขัดจังหวะฮาร์ดแวร์ในลักษณะเดียวกับที่ซีพียูทำ

ฉันคิดเสมอว่าวิธีการใช้งาน GPU หมายถึงเป็นเหมือน Playstation 3 "SPEs" พวกเขาต้องการได้รับบล็อกของข้อมูลเรียกใช้การดำเนินการตามลำดับจำนวนหนึ่งจากนั้นคายบล็อกอื่นของ ข้อมูลล้างทำซ้ำ พวกเขาไม่มีหน่วยความจำที่สามารถระบุตำแหน่งได้มากเท่ากับ "CPE" หลัก แต่ความคิดคือการอุทิศ "SPE" แต่ละรายการให้กับงานเฉพาะตามลำดับ เอาต์พุตของยูนิตหนึ่งอาจป้อนอินพุตของยูนิตอื่น

หน่วยดำเนินการทำงานได้ไม่ดีหากพวกเขาพยายามที่จะ "วิเคราะห์" ข้อมูลและทำการตัดสินใจโดยขึ้นอยู่กับว่าข้อมูลนั้นคืออะไร

"บล็อกข้อมูล" เหล่านี้สามารถเป็นส่วนหนึ่งของสตรีมได้เช่นรายการจุดยอดจากตารางสถานะของเกมข้อมูล MPEG จากดิสก์เป็นต้น

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


จุดดีเกี่ยวกับการเพิ่มประสิทธิภาพการทำนายสาขา - ฉันจะไม่เคยพิจารณาเรื่องนี้ แต่คุณพูดถูก
Jimmy Breck-McKye

6

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

มีการถกเถียงกันมานานมากว่าจะดีกว่าถ้ามีแกนใบ้จำนวนมากหรือกลุ่มแกนเล็ก ๆ ที่ฉลาดมาก สิ่งนี้จะย้อนกลับไปในยุค 80 ได้อย่างง่ายดาย

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

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

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

นี้เป็นมากคำถามที่ซับซ้อนกว่านั้นอาจปรากฏ สำหรับข้อมูลเพิ่มเติมอ่านบทความนี้เกี่ยวกับการออกแบบ CPU:

Modern Microprocessors - คู่มือ 90 นาที

http://www.lighterra.com/papers/modernmicroprocessors/


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

1
ฉันแก้ไขให้คุณแล้วและเพิ่มลิงค์ด้วย
bwDraco

5

ฉันต้องการเจาะลึกลงไปหนึ่งจุด Syntactic: คำว่า CPU และ GPU เป็นชื่อที่ใช้งานได้ไม่ใช่ชื่อทางสถาปัตยกรรม

หากคอมพิวเตอร์ต้องใช้ GPU เป็นตัวประมวลผลหลักมันจะกลายเป็น "หน่วยประมวลผลกลาง" (CPU) โดยไม่คำนึงถึงสถาปัตยกรรมและการออกแบบ


4

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

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

กลเม็ดที่น่าทึ่งส่วนใหญ่ที่ใช้ในการสร้าง GPU ทำสิ่งที่พวกเขาเร็วมากนั้นถูกพัฒนาขึ้นเป็นครั้งแรกโดยผู้ที่พยายามทำให้ CPU เร็วขึ้นและดีขึ้น ปรากฎว่า Word และ Excel และ Netscape และอื่น ๆ อีกมากมายที่ผู้คนใช้คอมพิวเตอร์ของพวกเขาไม่เพียง แต่ไม่ได้ใช้ประโยชน์จากฟีเจอร์ที่นำเสนอโดยชิปเฉพาะทางกราฟิก แต่ยังทำงานได้ช้ากว่าในสถาปัตยกรรมเหล่านั้น และช้า) ล้างเส้นท่อ


1
ฉันคิดว่าท่อเหนือศีรษะเป็นรายละเอียดพื้นฐานคำตอบอันดับสูงจะหายไป
Steve

2

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


ใช่ก้าวไปข้างหน้าหนึ่งก้าวถอยหลังสองก้าว
Randolf Richardson

2

ด้วยเหตุผลง่ายๆ: แอปพลิเคชันส่วนใหญ่ไม่ได้มีหลายเธรด / เวกเตอร์

การ์ดกราฟิกต้องพึ่งพาเธรดหลายเธรดอย่างน้อยในแนวคิด

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

ด้วยฟิวชั่นของ AMD มันจะเปลี่ยนวิธีที่เราจะต้องใช้ประโยชน์จากพลังการประมวลผล: ทั้งแบบเวกเตอร์และแบบรวดเร็วสำหรับหนึ่งเธรด


2

เหตุผลที่เรายังใช้ซีพียูอยู่ก็คือทั้งซีพียูและ GPU นั้นมีข้อดีที่เป็นเอกลักษณ์ ดูกระดาษต่อไปนี้ของฉันซึ่งได้รับการยอมรับใน ACM Computing Surveys 2015 ซึ่งให้การอภิปรายอย่างละเอียดและครอบคลุมเกี่ยวกับการย้ายออกจาก 'การอภิปราย CPU เทียบกับ GPU' เป็น 'การคำนวณร่วมกันของ CPU-GPU'

การสำรวจของ CPU-GPU เทคนิคการคำนวณที่ต่างกัน


1

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


1

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

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

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