GPU programlamaya giriş [kapalı]


176

Herkesin masaüstünde bir devasa paralel paralel süper bilgisayar, bir grafik kartı GPU şeklinde var.

  • GPU topluluğunun "merhaba dünyası" eşdeğeri nedir?
  • Büyük GPU sağlayıcıları için GPU'yu programlamaya başlamak için ne yapmalıyım?

-Adam


1
GPGPU veya grafik kodlamadan mı bahsediyorsunuz?
Menkboy

5
CUDA (nVidia GPU'lar için bir API) ve diğer tekniklerden bahsediyor. Grafik olmayan kodlama için GPU'larda bulunan FPU birimlerini kullanma.
Kama

1
Referans olarak, son nesil GeForce 8800, ~ 1.3 GHz'de çalışan 128 akış işlemcisine sahiptir, GTX 280'in üst kısmında 240 akış işlemcisi vardır, bu GPU'ların teorik performansı sırasıyla 0.5 ve 0.9 TeraFLOPS'tur.
Kama

Yanıtlar:


70

NVidia'dan CUDA'ya göz atın, IMO GPU programlama yapmak için en kolay platform. Okumak için tonlarca serin malzeme var. http://www.nvidia.com/object/cuda_home.html

Merhaba dünya GPU kullanarak her türlü hesaplama yapmak olacaktır.

Umarım yardımcı olur.


17
  1. Çizilecek arabellekleri değiştirmek için doğrudan GPU üzerinde kod yürütülmesine izin veren programlanabilir tepe noktası ve piksel gölgelendiricileri alırsınız. Bu diller (yani OpenGL'nin GL Shader Lang ve Üst Düzey Shader Lang ve DirectX'in eşdeğerleri), C stili sözdizimidir ve kullanımı gerçekten kolaydır. Bazı HLSL örnekleri burada XNA oyun stüdyosu ve Direct X için bulunabilir . İyi GLSL referanslarım yok, ama eminim etrafta çok şey var. Bu gölgelendirici dilleri, doğrudan grafik kartında, köşe başına veya piksel başına çizilenleri manipüle etmek için çok büyük bir güç verir, böylece gölgeler, aydınlatma ve çiçeklenme gibi şeylerin uygulanması gerçekten kolaydır.
  2. Akla gelen ikinci şey , genel amaçlı GPU'ların yeni satırlarını kodlamak için openCL kullanmaktır . Bunu nasıl kullanacağımdan emin değilim, ancak anlayışım, openCL'nin hem grafik kartı hem de normal işlemci üzerindeki işlemcilere erişebilmeye başlaması olduğunu gösteriyor. Bu henüz ana akım bir teknoloji değil ve Apple tarafından yönlendiriliyor gibi görünüyor.
  3. CUDA sıcak bir konu gibi görünüyor. CUDA nVidia'nın GPU gücüne erişme yoludur. İşte bazı tanıtımlar

9

Sanırım diğerleri ikinci sorunuzu yanıtladı. İlk olarak, CUDA'nın "Merhaba Dünyası" için, belirli bir standart olduğunu düşünmüyorum, ama kişisel olarak, paralel bir toplayıcı (yani N tamsayıları toplayan bir program) öneririm.

NVIDIA SDK'da "azaltma" örneğine bakarsanız, yüzeysel olarak basit görev, birleştirilmiş okumalar, bellek bankası çakışmaları ve döngü açma gibi çok sayıda CUDA değerlendirmesi göstermek için genişletilebilir.

Daha fazla bilgi için bu sunuma bakın:

http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf



7

OpenCL , diğer şeylerin yanı sıra GPU'lar için uygun kod programlama yeteneğine sahip bir platformlar arası kütüphane oluşturma çabasıdır. Kodun hangi GPU üzerinde çalışacağını bilmeden yazmasına izin verir, böylece bazı GPU türlerini özel olarak hedeflemeden GPU'nun bazı güçlerini kullanmayı kolaylaştırır. Yerel GPU kodu kadar performans göstermediğinden (veya GPU üreticilerinin izin verdiği kadar doğal olmadığından) şüpheleniyorum, ancak bazı uygulamalar için dengeye değebilir.

Hala nispeten erken aşamalarında (bu cevabın 1.1'i), ancak endüstride bir miktar çekiş kazandı - örneğin, OS X 10.5 ve üzeri sürümlerde yerel olarak destekleniyor.


6

CUDA başlangıç ​​için mükemmel bir çerçevedir. C'ye GPGPU çekirdekleri yazmanıza izin verir. Derleyici, kodunuzdan GPU mikro kodu üretecek ve CPU üzerinde çalışan her şeyi normal derleyicinize gönderecektir. Sadece NVIDIA'dır ve sadece 8 serisi veya daha iyi kartlarda çalışır. Onunla neler yapılabileceğini görmek için CUDA bölgesini kontrol edebilirsiniz. CUDA SDK'sında bazı harika demolar var . SDK ile birlikte gelen belgeler, kod yazmak için oldukça iyi bir başlangıç ​​noktasıdır. Başlamak için harika bir yer olan bir matris çarpma çekirdeği yazarak size yol gösterecektir.


5

CUDA veya OpenCL'ye girmeden GPU programlamaya girmenin bir başka kolay yolu, bunu OpenACC aracılığıyla yapmaktır .

OpenACC #pragma acc kernels, GPU'ya iş göndermek için derleyici yönergeleri (gibi ) ile OpenMP gibi çalışır . Örneğin, büyük bir döngünüz varsa (yalnızca büyük olanlar gerçekten yarar sağlar):

int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
  b[i] = b[i] * a;
}

Düzenleme: ne yazık ki, NVIDIA GPU kartları için şu anda sadece PGI derleyicisi OpenACC'yi gerçekten destekliyor.


3

GPU ++ ve libSh'yi deneyin

LibSh bağlantısı, programlama dilini grafik ilkellerine (ve açıkçası ilkellerin kendilerine) nasıl bağladıkları hakkında iyi bir açıklamaya sahiptir ve GPU ++ her ikisinin de kod örnekleriyle ne hakkında olduğunu açıklar.


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.