2 Précision des calculs

Les GPU actuels, avec CUDA, n'ont qu'une précision FP32, sur 32 bits. Il faut se tourner vers les solutions d'ATI/AMD pour une précision double sur 64 bits, ou bien vers des GPU plus chers, comme les Tesla ou les Quadro, ou bien récents, comme tous les GPU basés sur le GT200 (GeForce GTX260 à GTX295).

Tous les processeurs ne fonctionnent pas à la même précision : sur les premières GeForce compatibles CUDA, tous sont FP32. Sur un T10, 8 unités sont FP32 et une seule FP64. Chez AMD, pour 8 unités FP64, il y a 4 unités FP32.

Le peu d'unités dédiées au calcul à double précision sur les Tesla et autres explique leur faible puissance à ce niveau de précision, en comparaison de la simple précision ou bien des solutions d'AMD. Ainsi, pour du calcul en haute précision, les solutions NVIDIA tous publics ne sont pas encore au point (AMD ne propose plus de GPGPU pour la même gamme).

Actuellement, tous les processeurs supportent la double précision sur 64 bits.

Plus précisément, NVIDIA met à disposition la liste des écarts avec les standards, ainsi que ses limitations.

  • Les additions et soustractions sont souvent associées en une seule instruction ;
  • La division et la racine carrée sont implémentées par la réciproque, non conformément aux standards ;
  • Pour la multiplication et l'addition, il n'est possible que d'arrondir vers le nombre pair le plus proche ;
  • Il n'y a pas de possibilité d'arrondi configurable dynamiquement ;
  • Il n'y a pas de signalisation de NaN (Not a Number) ;
  • Il n'y a pas de mécanisme de détection d'exception, qui sera masquée selon les standards ;
  • Les opérandes de source dé-normalisée tendent vers 0 ;
  • Le résultat d'une opération avec NaN est un NaN canonique de la forme 0x7fffffff ;
  • En accord avec les standards, si un NaN est passé à min() ou à max(), l'autre sera retourné.