Wprowadzenie do programowania GPU [zamknięte]

176

Każdy ma na swoim pulpicie ten ogromny, masowo zrównoleglony superkomputer w postaci karty graficznej GPU.

  • Jaki jest odpowiednik społeczności GPU „hello world”?
  • Co mam zrobić, gdzie mam się udać, aby rozpocząć programowanie GPU dla głównych dostawców GPU?

-Adam

Adam Davis
źródło
1
Mówisz o GPGPU czy kodowaniu grafiki?
Menkboy
5
Mówi o CUDA (API dla GPU nVidia) i innych technikach. Wykorzystanie jednostek FPU dostępnych w GPU do kodowania nie graficznego.
Wedge
1
Dla porównania, najnowsza generacja GeForce 8800 ma 128 procesorów strumieniowych pracujących z częstotliwością ~ 1,3 GHz, najwyższy model GTX 280 ma 240 procesorów strumieniowych, teoretyczna wydajność tych GPU to odpowiednio 0,5 i 0,9 TeraFLOPS.
Wedge

Odpowiedzi:

70

Sprawdź CUDA firmy NVidia, IMO to najłatwiejsza platforma do programowania GPU. Jest mnóstwo fajnych materiałów do przeczytania. http://www.nvidia.com/object/cuda_home.html

Witaj, świecie byłoby wykonanie jakichkolwiek obliczeń za pomocą GPU.

Mam nadzieję, że to pomoże.

Nazgob
źródło
17
  1. Otrzymujesz programowalne shadery wierzchołków i pikseli, które umożliwiają wykonanie kodu bezpośrednio na GPU w celu manipulowania buforami, które mają być narysowane. Te języki (tj. GL Shader Lang OpenGL i High Level Shader Lang oraz odpowiedniki DirectX) mają składnię w stylu C i są naprawdę łatwe w użyciu. Kilka przykładów HLSL można znaleźć tutaj dla studia gier XNA i Direct X. Nie mam żadnych przyzwoitych odniesień do GLSL, ale jestem pewien, że jest ich dużo. Te języki shaderów dają ogromną moc do manipulowania tym, co jest rysowane na poziomie na wierzchołek lub piksel, bezpośrednio na karcie graficznej, dzięki czemu rzeczy takie jak cienie, oświetlenie i kwitnienie są naprawdę łatwe do wdrożenia.
  2. Drugą rzeczą, która przychodzi na myśl, jest użycie openCL do kodowania nowych linii GPU ogólnego przeznaczenia. Nie jestem pewien, jak tego użyć, ale rozumiem, że openCL daje początek możliwości dostępu do procesorów zarówno na karcie graficznej, jak i normalnym procesorze. Nie jest to jeszcze technologia głównego nurtu i wydaje się, że jest napędzana przez Apple.
  3. CUDA wydaje się być gorącym tematem. CUDA to sposób nVidii na dostęp do mocy GPU. Oto kilka wstępów
DavidG
źródło
9

Myślę, że inni odpowiedzieli na twoje drugie pytanie. Jeśli chodzi o pierwszy, „Hello World” programu CUDA, nie sądzę, że istnieje ustalony standard, ale osobiście poleciłbym dodawanie równoległe (tj. Program sumujący N liczb całkowitych).

Jeśli spojrzysz na przykład „redukcji” w NVIDIA SDK, to powierzchownie proste zadanie można rozszerzyć, aby zademonstrować liczne kwestie CUDA, takie jak połączone odczyty, konflikty z bankami pamięci i rozwijanie pętli.

Zobacz tę prezentację, aby uzyskać więcej informacji:

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

biocynk
źródło
7

Zapoznaj się z pakietem ATI Stream Computing SDK . Opiera się na BrookGPU opracowanym w Stanford.

W przyszłości cała praca na GPU zostanie ustandaryzowana przy użyciu OpenCL . Jest to inicjatywa sponsorowana przez Apple, która będzie neutralna dla dostawców kart graficznych.

grafika
źródło
7

OpenCL to próba stworzenia wieloplatformowej biblioteki zdolnej do programowania kodu odpowiedniego między innymi dla GPU. Pozwala napisać kod bez wiedzy, na którym GPU będzie on działał, ułatwiając w ten sposób wykorzystanie części mocy GPU bez kierowania się konkretnie do kilku typów GPU. Podejrzewam, że nie jest tak wydajny, jak natywny kod GPU (lub tak natywny, jak pozwolą na to producenci GPU), ale w przypadku niektórych aplikacji ten kompromis może być tego wart.

Wciąż jest na stosunkowo wczesnym etapie (1,1 w tej odpowiedzi), ale zyskał pewną popularność w branży - na przykład jest natywnie obsługiwany w systemie OS X 10.5 i nowszych.

Adam Davis
źródło
6

CUDA to doskonały framework na początek. Pozwala pisać jądra GPGPU w C. Kompilator wytworzy mikrokod GPU z twojego kodu i wyśle ​​wszystko, co działa na CPU do twojego zwykłego kompilatora. Jest to jednak tylko NVIDIA i działa tylko na kartach z serii 8 lub lepszych. Możesz sprawdzić strefę CUDA, aby zobaczyć, co można z nią zrobić. W CUDA SDK znajduje się kilka świetnych wersji demonstracyjnych . Dokumentacja dołączona do zestawu SDK jest całkiem dobrym punktem wyjścia do faktycznego pisania kodu. Przeprowadzi Cię przez proces pisania jądra mnożenia macierzy, co jest świetnym miejscem do rozpoczęcia.

Jay Conrod
źródło
5

Innym łatwym sposobem na rozpoczęcie programowania GPU bez wchodzenia do CUDA lub OpenCL jest zrobienie tego przez OpenACC .

OpenACC działa jak OpenMP, z dyrektywami kompilatora (takimi jak #pragma acc kernels), które wysyłają pracę do GPU. Na przykład, jeśli masz dużą pętlę (tylko większe naprawdę przynoszą korzyści):

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;
}

Edycja: niestety tylko kompilator PGI naprawdę obsługuje teraz OpenACC dla kart graficznych NVIDIA.

Kyle Niemeyer
źródło
3

Wypróbuj GPU ++ i libSh

Link LibSh zawiera dobry opis tego, jak powiązali język programowania z prymitywami graficznymi (i oczywiście z samymi prymitywami), a GPU ++ opisuje, o co w tym wszystkim chodzi, oba z przykładami kodu.

gbjbaanb
źródło
3

Jeśli używasz MATLAB-a, korzystanie z GPU do obliczeń technicznych (obliczenia macierzowe i ciężkie obliczenia matematyczne / liczbowe) staje się całkiem proste. Uważam, że jest to przydatne do zastosowań kart GPU poza grami. Sprawdź link poniżej:

http://www.mathworks.com/discovery/matlab-gpu.html

Chetan Rawal
źródło