Programmation GPU

La somme en virgule flottante des mêmes données calculée sur GPU diffère légèrement au dernier chiffre d'une exécution à l'autre. Quelle est la cause la plus probable ?

  1. ALes unités de calcul du GPU sont défectueuses
  2. BLes données sont réécrites à chaque fois dans le GPU
  3. CL'ordre d'addition varie d'une exécution à l'autre, notamment avec les opérations atomiques, et l'addition en virgule flottante donne des arrondis différents selon l'ordre
Afficher la réponse et l'explication

Réponse : C. L'ordre d'addition varie d'une exécution à l'autre, notamment avec les opérations atomiques, et l'addition en virgule flottante donne des arrondis différents selon l'ordre

L'addition en virgule flottante introduisant un arrondi à chaque fois, (a+b)+c et a+(b+c) peuvent différer légèrement. Dans une somme parallèle, l'ordre dans lequel les valeurs des threads sont additionnées dépend de l'ordre d'exécution des threads ou de l'ordre d'arrivée des opérations atomiques. Le dernier chiffre varie donc d'une exécution à l'autre. Pour obtenir un résultat identique à chaque fois, on utilise une réduction à ordre d'addition fixe.

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

Autres questions sur Programmation GPU

  1. Quelle règle générale guide le choix du nombre de threads par bloc en CUDA ?
  2. Quel est l'avantage d'écrire un noyau avec une boucle comme ci-dessus (boucle à pas de grille, grid-stride loop) ?
  3. Pour quel type d'accès la mémoire constante de CUDA est-elle particulièrement rapide ?
  4. Quelle est la caractéristique générale des caches GPU par rapport à ceux des CPU ?
  5. Quel est un exemple de mécanisme de programmation pour le calcul parallèle sur GPU et autres, utilisable aussi sur des GPU autres que NVIDIA ?

Comparatifs sur ce thème