Grafik İşlem Biriminde Genel Amaçlı Hesaplama

Grafik İşlem Birimiyle İlgili Genel Amaçlı Hesaplama (kısaca GPGPU , grafik işleme birimi ( leri) hakkında genel amaçlı hesaplama için İngilizce'den gelir) , orijinal kapsamı dışındaki hesaplamalar için bir grafik işlemcisinin kullanılması anlamına gelir . Bu, örneğin teknik veya ekonomik simülasyonlar için hesaplamalar olabilir. Paralel algoritmalar ile ana işlemciye kıyasla çok büyük bir hız artışı elde edilebilir.

genel bakış

GPGPU , grafik işlemcilerinin gölgelendiricilerinden ortaya çıktı . Gücü, pikselleri renklendirme veya büyük matrisleri çarpma gibi tek tip görevleri aynı anda gerçekleştirmede yatmaktadır . Modern işlemcilerin hızındaki artış şu anda (öncelikle) saat hızının arttırılmasıyla sağlanamadığından, paralelleştirme modern bilgisayarlarda daha yüksek bilgi işlem gücü elde etmede önemli bir faktördür. GPU'yu CPU'ya göre kullanmanın avantajı, daha yüksek bilgi işlem gücü ve daha yüksek bellek bant genişliğidir. Hız, esas olarak grafik işlemcisinin aritmetik işlemlerinin yüksek derecede paralelliği ile elde edilir.

model teorik bilgi işlem gücü Bellek veri yolu
veri hızı
( GByte / s )
Depolama türü Sanat
basit ile iki katına
Doğruluk ( GFlops )
AMD Radeon Pro Duo 16.384 1.024 1.024 HBM GPU
AMD Radeon R9 Öfke X 8.602 538 512
Nvidia Geforce GTX Titan X 6.144 192 336 GDDR5
AMD FirePro W9100 5.350 2.675 320
Nvidia Tesla K20X 3.950 1.310 250
AMD Radeon HD7970 3.789 947 264
Intel Xeon Phi 7120 2,420 1.210 352 yardımcı işlemci
PlayStation 4 SoC ( AMD ) 1.860 - 167 APU
Nvidia Geforce GTX580 1.581 198 192.4 GPU
Intel Xeon E7-8890 v3 1.440 720 102.4 (?) DDR4 İşlemci
AMD A10-7850k 856 - 34 DDR3 APU
Intel Core i7-3930K 307.2 153.6 51.2 İşlemci
SSE3, 3.6 GHz özellikli Intel Pentium 4 14.4 7.2 6.4 DDR2

Fragment ve vertex shader'ları aynı anda çalışabilir. Diğer bir avantaj, benzer hızlı diğer çözümlere kıyasla düşük fiyatının yanı sıra, günümüzde hemen hemen her bilgisayarda uygun grafik kartlarının bulunabilmesidir.

Tarih

Başlangıçta, gölgelendiriciler yalnızca grafiksel hesaplamalarla yakından bağlantılı özel işlevlerle ilişkilendirildi. Tek tek piksellerin hesaplanmasının hızını hızlandırmak için, birkaç benzer aritmetik birimi kullanarak tek tek piksellerin hesaplanmasını aynı anda yürütmeye geçildi. Daha sonra, gölgelendiricilerin çok sınırlı yeteneklerini, onları herhangi bir görev için büyük ölçüde paralel hesaplama birimlerine dönüştürmek için genişletme fikri: İlk - aşağı yukarı - serbestçe programlanabilir gölgelendiriciler ortaya çıktı. Gölgelendiricileri özgürce programlanabilir bir şekilde tasarlama trendi bugüne kadar devam ediyor ve her yeni nesil teknoloji ile çip tasarımcıları tarafından ileriye doğru itiliyor. Modern GPU'larda bazen bu programlanabilir gölgelendirici birimlerinden 1000'den fazla bulunur ve bu nedenle aynı anda 1000'den fazla bilgi işlem işlemi gerçekleştirebilir.

eleştiri

OpenCL tarafından GPGPU hesaplamalarını uygulamak için tek tip bir arayüz mevcuttur. Geleneksel CPU'lara kıyasla dezavantaj, bu avantajlardan yararlanmak için programların yürütülmesi gereken büyük paralelliktir. GPU'ların işlevleri de sınırlıdır. Bilim sektörü için özel grafik modelleri ( Nvidia Tesla , AMD FireStream ) bulunmaktadır . Bu grafik kartlarının hafızasında hata düzeltme prosedürleri vardır ve kayan noktalı sayıların hesaplanmasındaki doğrulukları daha fazladır ve bu da maliyetlere yansır.

programlama

OpenCL , CUDA ve 2012'den beri C ++ AMP temel olarak GPGPU uyumlu programlar geliştirmek için kullanılabilir . CUDA tescilli iken OpenCL, birçok platformlarda kullanılabilir bir açık standarttır çerçeve gelen Nvidia ve sadece bu üreticiden GPU'ları yayınlanabilir. AMP biridir Microsoft başlatılan C ++ küçük ile birlikte -Spracherweiterung şablonu - kütüphanede onlar ne Microsoft ürünleri, ne de belli Hızlandırıcı için anlamda açık olan donanım , tip veya belirli donanım üreticileri (sadece GPGPUs kullanabilirsiniz sınırlıdır ama aynı zamanda CPU'lar ve gelecekte bulut bilişim gibi başka paralelleştirme seçenekleri ). Microsoft'un AMP uygulamasında GPU'nun DirectX Sürüm 11'i desteklemesi bekleniyor, çünkü yalnızca bu sürümde GPU'ların GPGPU'lar olarak kullanımına özel önem verildi. AMP kullanan bir program yeterince güncel bir GPU bulamazsa, AMP yardımıyla programlanan algoritma, paralelleştirme seçenekleri ( birden fazla işlemci çekirdeğinde çoklu okuma , SIMD talimatları) kullanılarak CPU üzerinde otomatik olarak yürütülür. Bu nedenle AMP, bir algoritma ile yürüten bilgisayarın donanım ekipmanı arasında tam bir soyutlama katmanı oluşturmalıdır. Ek olarak, birkaç yeni C++ dil yapısı ve birkaç yeni kitaplık sınıfıyla sınırlandırılması , paralel algoritmaların geliştirilmesindeki önceki engelleri ve çabaları azaltacaktır. DirectX 11 zaten tüm yaygın GPU serileri tarafından (DirectX 11 tanıtımından daha yeni) ( Intel'in yonga seti ile tümleşik GPU'ları gibi temel performans GPU'ları dahil) tarafından yerel olarak donanım tarafından desteklenmektedir , ancak DirectX 11 yalnızca Windows 7 ile tanıtıldı ve Windows Vista için Sağlandı yalnızca , böylece eski Windows işletim sistemleri AMP ile kullanılamaz. C++ AMP'nin diğer platformlar tarafından mı yoksa Windows dünyasının dışındaki C++ geliştirme ortamları tarafından mı uyarlanıp uyarlanmayacağı şu anda tamamen açık.

Daha yeni bir yaklaşımdır OpenACC gibi, OpenMP, bir derleyici pragmas ile kontrol. Sıradan kaynak kodu, ör. B. C++'da, "#pragma acc parallel" gibi belirli derleyici pragmalarının seri olarak formüle edilmiş for döngülerinin önüne yerleştirilmesiyle otomatik olarak paralelleştirilir. Taşıma çabası nispeten küçüktür. Ancak, otomatik paralelleştirme her zaman optimal çözümlere yol açmaz. Bu nedenle OpenACC, OpenCL'deki gibi açık paralel programlamayı asla tamamen değiştiremez. Bununla birlikte, birçok durumda GPGPU'da yüksek ivme faktörlerini bu basit yolla elde edebilmek faydalı olacaktır. OpenACC, PGI gibi ticari derleyiciler ve GNU Derleyici Koleksiyonu gibi ücretsiz derleyiciler tarafından desteklenir .

Programları bir GPU'da çalıştırmak için bilgi akışını kontrol eden bir ana bilgisayar programına ihtiyacınız vardır. Genellikle, C benzeri bir dilde formüle edilen GPGPU kodu, ana bilgisayar programının talimatıyla çalışma zamanında derlenir ve daha sonraki işlemler için grafik işlemciye gönderilir, bu da daha sonra hesaplanan verileri ana bilgisayar programına döndürür.

Ayrıca bakınız

Edebiyat

  • Matt Pharr: GPU Taşları 2 . Addison-Wesley Publishing Company, 2005, ISBN 0-321-33559-7 , Bölüm IV - GPU'larda Genel Amaçlı Hesaplama: Bir Primer.
  • David B. Kirk: Devasa Paralel İşlemcileri Programlama: Uygulamalı Bir Yaklaşım [Ciltli Kitap] . Morgan Kaufmann, 2010, ISBN 978-0-12-381472-2 .

İnternet linkleri