Einführung in die GPU-Programmierung [geschlossen]

176

Jeder hat diesen riesigen, massiv parallelisierten Supercomputer in Form einer Grafikkarten-GPU auf seinem Desktop.

  • Was ist das "Hallo Welt" -Äquivalent der GPU-Community?
  • Was mache ich, wohin gehe ich, um mit der Programmierung der GPU für die wichtigsten GPU-Anbieter zu beginnen?

-Adam

Adam Davis
quelle
1
Sprechen Sie über GPGPU oder Grafikcodierung?
Menkboy
5
Er spricht über CUDA (eine API für nVidia-GPUs) und andere Techniken. Verwenden der in GPUs verfügbaren FPU-Einheiten für die Nicht-Grafikcodierung.
Wedge
1
Als Referenz hat eine GeForce 8800 der letzten Generation 128 Stream-Prozessoren, die mit ~ 1,3 GHz arbeiten, eine erstklassige GTX 280 hat 240 Stream-Prozessoren, die theoretische Leistung dieser GPUs beträgt 0,5 bzw. 0,9 TeraFLOPS.
Wedge

Antworten:

70

Schauen Sie sich CUDA von NVidia an. IMO ist die einfachste Plattform für die GPU-Programmierung. Es gibt jede Menge cooler Materialien zu lesen. http://www.nvidia.com/object/cuda_home.html

Hallo Welt wäre es, jede Art von Berechnung mit GPU durchzuführen.

Hoffentlich hilft das.

Nazgob
quelle
17
  1. Sie erhalten programmierbare Vertex- und Pixel-Shader, mit denen Code direkt auf der GPU ausgeführt werden kann, um die zu zeichnenden Puffer zu bearbeiten. Diese Sprachen (dh OpenGLs GL Shader Lang und High Level Shader Lang sowie DirectXs Äquivalente) haben eine C-Syntax und sind sehr einfach zu verwenden. Einige Beispiele für HLSL finden Sie hier für XNA Game Studio und Direct X. Ich habe keine anständigen GLSL-Referenzen, aber ich bin mir sicher, dass es eine Menge gibt. Diese Shader-Sprachen bieten eine immense Menge an Möglichkeiten, um zu manipulieren, was auf Scheitelpunkt- oder Pixelebene direkt auf der Grafikkarte gezeichnet wird, sodass Dinge wie Schatten, Beleuchtung und Blüte wirklich einfach zu implementieren sind.
  2. Das zweite, was mir in den Sinn kommt, ist die Verwendung von openCL zum für die neuen Zeilen von Allzweck-GPUs. Ich bin mir nicht sicher, wie ich das verwenden soll, aber ich verstehe, dass openCL Ihnen die Anfänge gibt, auf Prozessoren sowohl auf der Grafikkarte als auch auf der normalen CPU zugreifen zu können. Dies ist noch keine Mainstream-Technologie und scheint von Apple angetrieben zu werden.
  3. CUDA scheint ein heißes Thema zu sein. Mit CUDA kann nVidia auf die GPU-Stromversorgung zugreifen. Hier sind einige Intros
DavidG
quelle
9

Ich denke, die anderen haben Ihre zweite Frage beantwortet. Was die erste, die "Hallo Welt" von CUDA, betrifft, glaube ich nicht, dass es einen festgelegten Standard gibt, aber ich persönlich würde einen parallelen Addierer empfehlen (dh ein Programm, das N ganze Zahlen summiert).

Wenn Sie sich das Beispiel "Reduzierung" im NVIDIA SDK ansehen, kann die oberflächlich einfache Aufgabe erweitert werden, um zahlreiche CUDA-Überlegungen wie zusammengeführte Lesevorgänge, Speicherbankkonflikte und das Abrollen von Schleifen zu demonstrieren.

Weitere Informationen finden Sie in dieser Präsentation:

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

Biozink
quelle
7

Schauen Sie sich das ATI Stream Computing SDK an . Es basiert auf der in Stanford entwickelten BrookGPU .

In Zukunft werden alle GPU-Arbeiten mit OpenCL standardisiert . Es handelt sich um eine von Apple gesponserte Initiative, die herstellerneutral für Grafikkarten ist.

Grafik
quelle
7

OpenCL ist ein Versuch, eine plattformübergreifende Bibliothek so zu gestalten, dass Code programmiert werden kann, der unter anderem für GPUs geeignet ist. Es ermöglicht das Schreiben des Codes, ohne zu wissen, auf welcher GPU er ausgeführt wird, wodurch es einfacher wird, einen Teil der Leistung der GPU zu nutzen, ohne gezielt auf mehrere GPU-Typen abzuzielen. Ich vermute, es ist nicht so leistungsfähig wie nativer GPU-Code (oder so nativ, wie es die GPU-Hersteller zulassen), aber der Kompromiss kann sich für einige Anwendungen lohnen.

Es befindet sich noch in einem relativ frühen Stadium (1.1 ab dieser Antwort), hat jedoch in der Branche an Bedeutung gewonnen - beispielsweise wird es von OS X 10.5 und höher nativ unterstützt.

Adam Davis
quelle
6

CUDA ist zunächst ein hervorragender Rahmen. Sie können damit GPGPU-Kernel in C schreiben. Der Compiler erstellt aus Ihrem Code einen GPU-Mikrocode und sendet alles, was auf der CPU ausgeführt wird, an Ihren regulären Compiler. Es ist jedoch nur NVIDIA und funktioniert nur auf Karten der Serie 8 oder besser. Sie können die CUDA-Zone überprüfen, um zu sehen, was damit getan werden kann. Das CUDA SDK enthält einige großartige Demos . Die mit dem SDK gelieferte Dokumentation ist ein ziemlich guter Ausgangspunkt für das eigentliche Schreiben von Code. Es wird Sie durch das Schreiben eines Matrix-Multiplikationskerns führen, der ein guter Anfang ist.

Jay Conrod
quelle
5

Eine andere einfache Möglichkeit, in die GPU-Programmierung einzusteigen, ohne in CUDA oder OpenCL einzusteigen, besteht darin, dies über OpenACC zu tun .

OpenACC funktioniert wie OpenMP, mit Compiler-Anweisungen (wie #pragma acc kernels) zum Senden von Arbeit an die GPU. Zum Beispiel, wenn Sie eine große Schleife haben (nur größere profitieren wirklich):

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

Bearbeiten: Leider unterstützt derzeit nur der PGI-Compiler OpenACC für NVIDIA-GPU-Karten.

Kyle Niemeyer
quelle
3

Versuchen Sie GPU ++ und libSh

Der LibSh-Link enthält eine gute Beschreibung, wie die Programmiersprache an die Grafikprimitive (und natürlich an die Primitive selbst) gebunden wurde, und GPU ++ beschreibt anhand von Codebeispielen, worum es geht.

gbjbaanb
quelle
3

Wenn Sie MATLAB verwenden, wird es ziemlich einfach, GPUs für das technische Rechnen zu verwenden (Matrixberechnungen und starkes Rechnen mit Mathematik / Zahlen). Ich finde es nützlich für die Verwendung von GPU-Karten außerhalb von Spielen. Überprüfen Sie den Link unten:

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

Chetan Rawal
quelle