ทำไมต้องใช้ SIMD ถ้าเรามี GPGPU


13

ฉันคิดว่าคำถามนี้ตอบสนองได้ดีขึ้นในส่วน CS ของ Stack Exchange ตอนนี้เรามี GPGPU ที่ใช้ภาษาเช่น CUDA และ OpenCL แล้วส่วนขยาย SIMD มัลติมีเดีย (SSE / AVX / NEON) ยังมีจุดประสงค์หรือไม่

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

ถ้า GPGPU ทำ SIMD ซ้ำซ้อนเหตุใด Intel จะเพิ่มการรองรับ SIMD ของพวกเขา SSE คือ 128 บิตตอนนี้เป็น 256 บิตด้วย AVX และปีหน้าจะเป็น 512 บิต หาก GPGPU เป็นรหัสการประมวลผลที่ดีขึ้นพร้อมกับความขนานของข้อมูลทำไม Intel ถึงผลักดันส่วนขยาย SIMD เหล่านี้ พวกเขาอาจจะสามารถใส่ทรัพยากรที่เทียบเท่า (การวิจัยและพื้นที่) ลงในแคชที่มีขนาดใหญ่ขึ้นและตัวทำนายสาขาซึ่งจะเป็นการปรับปรุงประสิทธิภาพการทำงานแบบอนุกรม

ทำไมถึงใช้ SIMD แทน GPGPU


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

2
@Juho ไม่ใช่อุปกรณ์ใหม่อย่าง APU ของ AMD ที่มี GPU และ CPU ในแบบเดียวกันหรือไม่ สิ่งนี้จะกำจัดคอขวดหรือไม่?
jonfrazen

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

Intel ไม่ได้ทำอะไรมากเกี่ยวกับ GPU (นอกเหนือจาก Larrabee / Knights Landing :)) ดังนั้นฉันคิดว่ามันเป็นเรื่องธรรมดาที่พวกเขาจะพยายามผลักดัน AVX แทน ถึงแม้ว่าการใช้ AVX แบบหนักอาจมีประสิทธิภาพมาก แต่ตอนนี้มันส่งผลให้ downclocking บนซีพียูรุ่นใหม่กว่าของพวกเขาดังนั้นพวกเขาจึงอาจมีข้อ จำกัด บางอย่าง
nsandersen

คำตอบ:


16

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

ลองเปรียบเทียบกัน คอร์ i7-5960x ของ Intel มี 8 คอร์แต่ละตัวมี 4 SIMD (ความแม่นยำสองเท่า), ทำงานที่ 3 GHz (3.5GHz เทอร์โบ), แคช 20M L3, ใช้ 356mm ^ 2 และ 140W และราคา $ 1,000 ดังนั้น 8 * 4 * 3 * 4 = 384 GFlops ที่มีความแม่นยำสองเท่า (4x พิเศษนั้นเป็นเพราะคุณสามารถทำสอง fused-multiply- เพิ่มต่อเลนเวกเตอร์ต่อรอบ) มันสามารถทำได้ 768 GFlops ความแม่นยำเดียว นั่นคือประมาณ 1.08 DP GFlops / mm ^ 2 และ 2.75 DP GFlops / Watt นอกจากนี้ยังมีแคชชิปบนชิปประมาณ 57.5 KB / mm ^ 2

GeForce GTX Titan Black ของ NVidia มี 15 SMXs แต่ละอันมีความแม่นยำ 32 หน้ากว้างสอง SIMD ทำงานที่ 890MHz (980MHz เทอร์โบ), แคช L1 + L2 3.5M ใช้ 561mm ^ 2, 250W และราคา $ 1,000 ดังนั้น 15 * 32 * .89 * 4 = 1709 GFlops ความแม่นยำสองเท่า (4x เท่ากันจากสอง fused-multiply- เพิ่มต่อเวกเตอร์เลนต่อรอบ) สามารถทำ GFlops ที่มีความแม่นยำเพียง 5126 ครั้ง นั่นคือประมาณ 3.05 DP GFlops / mm ^ 2 และ 6.8 DP GFlops / Watt ดังนั้นความหนาแน่นของจุดลอยตัว DP 3 เท่าต่อหนึ่งหน่วยพื้นที่และประสิทธิภาพการใช้พลังงานจุดลอยตัว 3 เท่า DP และการแลกเปลี่ยน? แคชในชิป 6.4 KB / mm ^ 2 มีความหนาแน่นน้อยกว่า CPU ประมาณ 9x

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

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

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