Le contenu suivant peut concerner les erreurs de calcul dans les GPU.
Avec suffisamment de temps, Intel i7-3610QM et une Nvidia GeForce GTX 660 seront en désaccord les uns avec les autres étant donné les mêmes instructions. (cuda 5.5, compute_20, sm_20)
Donc, on doit conclure que l'un des deux fait une erreur.
Au cours d'une étude de faisabilité de simulation de particules, j'ai remarqué qu'après un millier de transformations de double précision (transformations comprenant le péché, le cos, la multiplication, la division, l'addition et la soustraction), des erreurs ont commencé à s'introduire.
Je vais vous donner un petit extrait de chiffres à comparer (le premier numéro est toujours le CPU, le deuxième GPU)
-1.4906010142701069
-1.4906010142701074
-161011564.55005690
-161011564.55005693
-0.13829959396003652
-0.13829959396003658
-16925804.720949132
-16925804.720949136
-36.506235247679221
-36.506235247679228
-3.3870884719850887
-3.3870884719850896
(notez que toutes les séquences de transformation ne génèrent pas d'erreur)
Bien que l'erreur maximale soit presque négligeable, (0.0000000000000401%)
elle existe toujours et contribue à l'erreur cumulative.
Maintenant, cette erreur peut être due à une différence d'implémentation de l'une des bibliothèques intrinsèques. En effet, il semble que le GPU préfère arrondir ou tronquer où le processeur arrondit. Curieusement aussi, cela ne semble se produire que sur des nombres négatifs.
Mais le fait est que des instructions identiques ne garantissent pas nécessairement des résultats identiques, même sur des machines numériques.
J'espère que cela a contribué.
EDIT en tant que sidenote: dans le cas d'erreurs arithmétiques du GPU, cela (ctrl + f "Premier GPU avec prise en charge de la mémoire ECC") pourrait également être intéressant, mais pas nécessairement pertinent pour les erreurs ci-dessus.