Programmation GPU

En calcul en précision mixte sur GPU, pourquoi effectue-t-on souvent les multiplications en faible précision (FP16, etc.) et l'accumulation en FP32 ?

  1. AParce que les multiplications sont impossibles en FP32
  2. BParce que l'accumulation de nombreux produits en faible précision accumule les erreurs d'arrondi et fait disparaître les petites valeurs ; seule l'accumulation est donc faite en haute précision
  3. CParce que les additions sont impossibles en FP16
Afficher la réponse et l'explication

Réponse : B. Parce que l'accumulation de nombreux produits en faible précision accumule les erreurs d'arrondi et fait disparaître les petites valeurs ; seule l'accumulation est donc faite en haute précision

La mantisse du FP16 ne comptant que 10 bits, l'ajout d'un petit produit à une somme devenue grande peut faire disparaître le produit par arrondi. Un produit de matrices additionnant des milliers de produits, l'accumulation de ces erreurs fausse fortement le résultat. On effectue donc en faible précision les multiplications, coûteuses en mémoire et en unités de calcul, et seule l'accumulation en FP32. La plupart des Tensor Cores réalisent cette forme de multiplication-accumulation en une instruction.

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

Autres questions sur Programmation GPU

  1. 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 ?
  2. Quelle règle générale guide le choix du nombre de threads par bloc en CUDA ?
  3. Quel est l'avantage d'écrire un noyau avec une boucle comme ci-dessus (boucle à pas de grille, grid-stride loop) ?
  4. Pour quel type d'accès la mémoire constante de CUDA est-elle particulièrement rapide ?
  5. Quelle est la caractéristique générale des caches GPU par rapport à ceux des CPU ?

Comparatifs sur ce thème