Programmation GPU

Sur un GPU dont la limite est de 1024 threads par bloc de threads, on lance un noyau CUDA avec blockDim.x égal à 2048. Que se passe-t-il en général ?

  1. ALe GPU le découpe automatiquement en deux blocs de 1024 threads et les exécute
  2. BSeuls les 1024 premiers threads s'exécutent et les autres sont ignorés
  3. CLa configuration de lancement est considérée comme invalide : le noyau ne s'exécute pas et une erreur est renvoyée
Afficher la réponse et l'explication

Réponse : C. La configuration de lancement est considérée comme invalide : le noyau ne s'exécute pas et une erreur est renvoyée

Tous les threads d'un bloc de threads doivent résider simultanément sur un même SM et pouvoir coopérer par la mémoire partagée et __syncthreads() ; le nombre de threads par bloc est donc limité. Si l'on lance un noyau avec une configuration qui dépasse la limite, aucun thread ne s'exécute et le lancement échoue avec une erreur signalant une configuration invalide. Le lancement d'un noyau ne renvoie pas de valeur : sans vérifier l'erreur avec cudaGetLastError() ou une fonction similaire, on risque de ne pas remarquer que le tableau des résultats n'a jamais été mis à jour. Un travail pour 2048 threads se répartit entre plusieurs blocs de 1024 threads ou moins.

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

Calculateurs associés

Autres questions sur Programmation GPU

  1. On suppose qu'un SM de GPU possède une seule unité d'émission capable d'émettre à chaque cycle les instructions d'un warp. Chaque warp émet de façon répétée 20 cycles d'instructions, puis attend 400 cycles le résultat d'une lecture en mémoire. Si le changement de warp ne prend pas de temps, combien de warps faut-il au minimum pour supprimer le temps d'inactivité dû aux attentes mémoire (masquage de latence) ?
  2. Quelle est la différence de philosophie de conception entre CPU et GPU ?
  3. Quelle est la caractéristique la plus adaptée d'une tâche que le GPU traite rapidement ?
  4. Quel traitement tend à être peu efficace lorsqu'il est exécuté sur GPU ?
  5. Quelle est la définition du « noyau » (kernel) en programmation GPU, par exemple en CUDA ?

Comparatifs sur ce thème