Programmation GPU

Quel traitement tend à être peu efficace lorsqu'il est exécuté sur GPU ?

  1. ALe parcours d'une liste chaînée élément par élément depuis la tête, l'action suivante dépendant de la valeur de chaque élément
  2. BL'addition élément par élément de deux grands tableaux
  3. CLe doublement de la luminosité de tous les pixels d'une grande image
Afficher la réponse et l'explication

Réponse : A. Le parcours d'une liste chaînée élément par élément depuis la tête, l'action suivante dépendant de la valeur de chaque élément

Dans une liste chaînée, l'emplacement de l'élément suivant n'est connu qu'après lecture de l'élément précédent, ce qui empêche un parcours parallèle. De plus, si l'action dépend de la valeur, les branchements divergent au sein des groupes de threads exécutant la même instruction, ce qui réduit l'efficacité. Les emplacements mémoire sont dispersés et ne peuvent pas non plus être lus en bloc. Le GPU convient aux tâches indépendantes par élément, appliquant le même traitement à des données d'adresses contiguës.

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

Autres questions sur Programmation GPU

  1. Quelle est la définition du « noyau » (kernel) en programmation GPU, par exemple en CUDA ?
  2. Quelle est la hiérarchie correcte des threads en CUDA (du plus grand au plus petit) ?
  3. Dans un noyau CUDA, l'indice i de chaque thread est obtenu par l'expression ci-dessus. Que vaut i pour le thread tel que blockIdx.x=2, blockDim.x=256 et threadIdx.x=5 ?
  4. 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 ?
  5. Pourquoi le noyau CUDA ci-dessus contient-il « if (i < n) » ?

Comparatifs sur ce thème