CUDA teaching center

Introduzione alla programmazione in CUDA

Comandi utili

Comando

Sintassi

Utilizzo

cudaMalloc

cudaMalloc( (void **)&dev_a, N*sizeof(int) )

Utilizzo

cudaFree

cudaFree( dev_a )

Utilizzo




cudaMemcpy

cudaMemcpy( dev_a, a, N*sizeof(int), cudaMemcpyHostToDevice)

Utilizzo

cudaMemcpy( b, dev_b, N*sizeof(int), cudaMemcpyDeviceToHost)

Utilizzo

cudaMemcpy2D

cudaMemcpy2D( dev_a, N*sizeof(int), a, N*sizeof(int), N*sizeof(int), cudaMemcpyHostToDevice)

Utilizzo




syncthreads

__syncthreads()

doppio underscore iniziale




cudaEventRecord

cudaEventRecord(start1,0);

Utilizzo

cudaEventRecord(stop1,0);

Utilizzo

cudaEventSynchronize(stop1);

Utilizzo

cudaEventElapsedTime

cudaEventElapsedTime(&time1, start1, stop1);

Utilizzo




cudaSetDevice

cudaSetDevice(dev);

Utilizzo




Variabile

Significato

threadIdx.x
threadIdx.y
threadIdx.z

indice, coordinata del thread, rispetto alle coordinate x, y, z

blockIdx.x
blockIdx.y
blockIdx.z

indice, coordinata del blocco di threads, rispetto alle coordinate x, y, z

blockDim.x
blockDim.y
blockDim.z

dimensione del blocco di threads (i.e. quanti threads nel blocco), rispetto alle coordinate x, y, z

gridDim.x
gridDim.y
gridDim.z

dimensione della griglia (i.e. quanti blocchi lungo una direzione), rispetto alle coordinate x, y, z




Attributo

Esempio

Significato

__global__

__global__ void scalar_prod(dev_a, dev_b, dev_c)

(doppio underscore prima e dopo)
chiamabile da funzioni sia definite sull'HOST che sul DEVICE.

__device__

__device__ void scalar_prod(dev_a, dev_b, dev_c)

(doppio underscore prima e dopo)
chiamabile solo da funzioni definite sul DEVICE (quindi con attributo __global__ oppure __device__).

__shared__

__shared__ cache[blocksPerGrid];

(doppio underscore prima e dopo)

dim3

dim3 v(128,128,1)

tipo di dato: vettori interi; utilizzato per comunicare le dimensioni della griglia