Programmation GPU

On veut traiter un tableau de 1000 éléments à raison d'un élément par thread, avec 256 threads par bloc. Combien de blocs faut-il lancer ?

  1. A3
  2. B4
  3. C1000
Afficher la réponse et l'explication

Réponse : B. 4

1000÷256≒3,9 ; en arrondissant à 3 blocs, seuls 256×3=768 éléments seraient traités et le reste serait omis. On arrondit donc à 4 blocs (1024 threads) et les 24 threads excédentaires ne font rien. On calcule généralement l'arrondi supérieur sous la forme « (n + 256 - 1) / 256 ». Il faut vérifier l'indice dans le noyau pour que les threads excédentaires ne lisent ni n'écrivent hors du tableau.

S'entraîner sur ce thème Retour au thème

Autres questions sur Programmation GPU

  1. Pourquoi le noyau CUDA ci-dessus contient-il « if (i < n) » ?
  2. Comment appelle-t-on, sur les GPU NVIDIA, l'unité regroupant 32 threads qui exécutent simultanément la même instruction ?
  3. Quelle est la différence entre le mode SIMT (instruction unique, threads multiples) des GPU et les instructions SIMD des CPU ?
  4. Dans un warp, un branchement conditionnel envoie la moitié des threads dans la branche if et l'autre moitié dans la branche else (divergence de warp). Comment l'exécution se déroule-t-elle généralement ?
  5. Les codes (1) et (2) ci-dessus font tous deux exécuter A à la moitié des threads et B à l'autre moitié. Quelle explication est correcte du point de vue de l'efficacité des warps (32 threads par warp) ?

Comparatifs sur ce thème