Einfaches Handling in Cuda
Cuda ist spezialisert auf das parallele Verarbeiten vieler Elemente (Vektoren).
Bsp:
8 Blocks (Funktion wird 8 mal ausgeführt) mit
Vektoren in der Funktion.
Jedes Element des Vektors kann per Thread-Index angesprochen werden.
Zugriff auf ein Element
Der Index des Elements ist einfach gebildet
int index = (blockIdx.x * Blocktiefe) + threadIdx.x int index = (blockId2.2 * 8) + threadId5.5 int index = ( 2 * 8 ) + 5 = 21
Elemente aus verschiedenen Threads und Blocks
Sofern man genau weiss, wie weit die Daten in den einzelnen Threads generiert sind, können Indizes unterschiedlicher Nummern verarbeitet werden
__global__ void add( int *a, int *b, int *c ) { . c[index12] = a[index63] + b[index20]; }
Dazu braucht es jedoch die Synchronisation der Prozesse, die über synctrheads() organisiert werden kann.