GPGPU'muz varsa neden SIMD kullanıyorsunuz?


13

Bu sorunun Stack Exchange'in CS bölümünde daha iyi sunulduğunu düşündüm. Artık CUDA ve OpenCL gibi dillere sahip GPGPU'larımız olduğuna göre, multimedya SIMD uzantıları (SSE / AVX / NEON) hala bir amaca hizmet ediyor mu?

Kısa süre önce, sınıflandırma ağlarını hızlandırmak için SSE talimatlarının nasıl kullanılabileceği hakkında bir makale okudum. Bunun oldukça düzgün olduğunu düşündüm ama bilgisayar profesörüme söylediğimde güldü ve bir GPU'da benzer kod çalıştırmanın SIMD versiyonunu yok edeceğini söyledi. Bundan şüphem yok çünkü SSE çok basit ve GPU'lar çok daha fazla paralelliğe sahip büyük karmaşık kompleks hızlandırıcılardır, ancak beni düşündürdü, multimedya SIMD uzantılarının bir GPU kullanmaktan daha yararlı olduğu birçok senaryo var mı?

GPGPU'lar SIMD'yi yedek yaparsa, Intel neden SIMD desteklerini arttırıyor? SSE 128 bit, şimdi AVX ile 256 bit ve gelecek yıl 512 bit olacak. GPGPU'lar veri paralelliğine sahip daha iyi kod işliyorsa Intel neden bu SIMD uzantılarını zorluyor? Eşdeğer kaynakları (araştırma ve alan) daha büyük bir önbellek ve dal öngörücüsüne koyabilir ve böylece seri performansı geliştirebilir.

GPGPU'lar yerine neden SIMD kullanıyorsunuz?


2
GPU'yu meşgul etmek için yeterli veriyle beslemek kendi başına bir zorluktur. Ana bilgisayar ve cihaz arasındaki veri aktarımı hemen hemen her zaman darboğazdır. Bazı işlemler CPU'larda daha iyi desteklenir (örn. Taşıma gerektirmeyen çarpma; bkz. PCLMULQDQ).
Juho

2
@Juho AMD'nin APU'ları gibi yeni cihazlarda GPU ve CPU aynı kalıpta değil mi? Bu darboğazları ortadan kaldırır mı?
jonfrazen

1
Her şey söylendiğinde ve yapıldığında, bir vektör talimatı hala tek bir talimattır ve bunu programlama ve yürütme maliyeti diğer tek talimatlarla aynıdır. GPU'da sadece fayda maliyetten ağır bastığında iş yapmak mantıklıdır. Ayrıca çekirdek başına bir SIMD birimi, ancak genellikle kasa başına yalnızca bir GPU aldığınızı ve şu anda GPU'nun paylaşılan bir kaynak olduğunu düşünün. Bu, GPU'da çalıştırabileceğiniz iş sayısını sınırlar. (Çekirdek sayısı her zaman artmaktadır, ancak GPU sayısı
artmamaktadır

Intel GPU'lar (Larrabee / Knights Landing dışında) açısından pek bir şey yapmaz, bu yüzden bunun yerine AVX'i itmeye çalışmak doğaldır. Ağır AVX kullanımı çok performanslı olsa da, artık daha yeni CPU'larında hızaşırtma ile sonuçlanıyor, bu yüzden bir şeyle sınırlara çarpıyor olabilirler.
nsandersen

Yanıtlar:


16

Hiçbir şey bedava değil. GPGPUs vardır SIMD. GPGPU'lardaki SIMD talimatları CPU'lardaki SIMD talimatlarından daha geniş olma eğilimindedir. GPGPU'lar ince taneli çok iş parçacıklı olma eğilimindedir (ve CPU'lardan çok daha fazla donanım içeriğine sahiptir). GPGPU'lar akış için optimize edilmiştir . Kayan nokta birimlerine daha büyük bir alan yüzdesi, önbelleğe alınacak alanın daha düşük bir yüzdesi ve tamsayı performansına daha düşük bir alan yüzdesi ayırma eğilimindedir.

Bir karşılaştırma yapalım. Intel'in çekirdek i7-5960x modelinde, her biri 4 GHz (3,5 GHz turbo), 20M L3 önbellekte çalışan 8 çekirdekli 8 çekirdeği var ve 356mm ^ 2 ve 140W tüketiyor ve maliyeti 1000 $. * 3 * 4 = 384 çift hassasiyetli GFloplar. (Ek 4x, döngü başına vektör şeridi başına iki kaynaşmış-çarpma eklentisi yapabilmenizdir.) 768 tek duyarlıklı GFlop yapabilirsiniz. Bu yaklaşık 1.08 DP GFlop / mm ^ 2 ve 2.75 DP GFlop / Watt'tır. Ayrıca yaklaşık 57.5 KB / mm ^ 2 çip üzerinde önbellek var.

NVidia'nın GeForce GTX Titan Black'i, her biri 32 genişliğinde çift hassasiyetli SIMD'ye sahip, 890MHz (980MHz turbo), 3.5M L1 + L2 önbellekte çalışan 15 SMX'e sahiptir ve maliyeti 561mm ^ 2, 250W'dir ve maliyeti 1000 $ ' dır. .89 * 4 = 1709 çift kesinlikli GFloplar. (Çevrim başına vektör şeridi başına iki kaynaşmış çarpma eklentisinden aynı 4x.) 5126 tek duyarlıklı GFlop yapabilirsiniz. Bu yaklaşık 3.05 DP GFlop / mm ^ 2 ve 6.8 DP GFlop / Watt'tır. Yani birim alan başına DP kayan nokta yoğunluğunun 3 katı ve DP kayan nokta güç verimliliğinin 3 katı. Peki ya çıkış? 6,4 KB / mm ^ 2 yonga üzerinde önbellek. CPU'dan yaklaşık 9 kat daha az yoğundur.

Yani ana fark, GPU'nun önbellek üzerinde kayan noktayı (ve özellikle tek duyarlıklı kayan noktayı) güçlü bir şekilde destekleyen bir alan dengesi seçmesidir. I / O yapmak için CPU ve GPU arasında bir şeyler kopyalamanız gerektiğini göz ardı etseniz bile, GPU'nun CPU'ya kıyasla ne kadar iyi çalışacağı, çalıştırdığınız programa bağlıdır.

Çok az kontrol sapması olan bir veri paralel kayan nokta programınız varsa (tüm vektör şeritleri aynı anda aynı şeyi yapıyorsa) ve programınız akış yapıyor (önbellekten faydalanamıyor), GPU yaklaşık Birim alan veya Watt başına 3 kat daha verimli. Ancak, önemli miktarda ıraksak kontrolünüz varsa, veriye paralel olmayan bir işiniz varsa veya çok kez okunan büyük veri yapılarından yararlanabiliyorsanız, CPU muhtemelen daha iyisini yapacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.