Cuda ist von Nvidia eine Sprache wie auch Architektur zur GPU-Verarbeitung. Die Sprache wird im Buch CUDA_by_Example. ausführlich beschrieben. Einen ersten Üblick gibt folgender Vortrag, der vom Autor desselben Buches ebd. über Cuda_Introduction gegeben wurde.
Kompiler
nvcc
Trennung: Ablage in GPU – CPU
Der nvcc-Kompiler trennt den Code in CPU-Speicher und GPU-Speicher.
– Device-Funktionen werden im kernel() bearbeitet und im GPU-Speicher abgelegt.
– Normale Funktionen werden im der CPU (host) im main() bearbeitet und ihre Variablen liegen im Speicher der CPU. Kompiliert wird mit gcc.
int main( void) { kernel <<< 1, 1 >>> (); printf("hallo \n"); return 0; }
Von CPU auf GPU
__global__ : cuda Schlüssewort für Funktionen die auf GPU laufen,
. Diese Funktionen müssen von CPU – im main() – aufgerufen
. werden
<funktion> <<< : Befehl zum Ausführen der Funktion auf der GPU
>>> <parameter> : Mitgabe der Argumente für die GPU-Funktion.
Bsp.
__global__ void kernel( void ) { } __global__ void add (int *a, int *b, int *c) { *c = *a + *b; }
Dies funktioniert nur, wenn man im main() die Funktion auf die GPU verschiebt.
int main( void) { int a, b, c; int *dev_a, *dev_b, *dev_c; // Funktion auf GPU // Argumente mitgeben add <<< 1, 1 >>> (dev_a, dev_b, dev_c); printf("hallo \n"); return 0; }
CPU (host) ruft GPU (device) auf. Ist notwendig, um eine Funktion auf der GPU aufzurufen.