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.