CUDA : cours travaux pratiques
1. TD/TP 1 : Grid, Block, thread index
Ecrire un programme tid.cpp qui permet de vérifier la validité des formules de calcul des exercices qui suivent pour lesquels on désire calculer le gtid (Global Thread InDex), en fonction des variables
gridDim,
blockDim,
blockIdx,
threadIdx. (cf cours 3)
On considère que le kernel manipulera un tableau ou un vecteur d'entiers dont la taille est égale à :
int tab[ gridDim.x * gridDim.y * gridDim.z * blockDim.x * blockDim.y * blockDim.z ]
Initialement chacun des éléments du tableau est à 0, le but de chaque thread sera de mettre l'élément correspondant à son gtid à 1.
On vérifiera que le résultat est correct en faisant la somme des éléments de tab.
Tester les cas suivants :
- G1D B1D : exécuter le programme par exemple avec ./tid.exe 1 1 1 10 1 1. C'est à dire avec une grille de dimension (x=1,y=1,z=1) et un bloc de dimension (x=10,y=1,z=1)
- G1D B2D : exécuter par exemple avec ./tid.exe 1 1 1 10 2 1. C'est à dire avec une grille de dimension (x=1,y=1,z=1) et un bloc de dimension (x=10,y=2,z=1)
- G2D B1D : exécuter par exemple avec ./tid.exe 3 2 1 10 1 1. C'est à dire avec une grille de dimension (x=3,y=2,z=1) et un bloc de dimension (x=10,y=1,z=1)
- G2D B2D : exécuter par exemple avec ./tid.exe 3 2 1 10 7 1. C'est à dire avec une grille de dimension (x=3,y=2,z=1) et un bloc de dimension (x=10,y=7,z=1)
- G1D B3D : exécuter par exemple avec ./tid.exe 1 1 1 10 7 3. C'est à dire avec une grille de dimension (x=1,y=1,z=1) et un bloc de dimension (x=10,y=7,z=3)
- G2D B3D exécuter par exemple avec ./tid.exe 2 5 1 10 7 3. C'est à dire avec une grille de dimension (x=2,y=5,z=1) et un bloc de dimension (x=10,y=7,z=3)