Der folgende Inhalt befasst sich möglicherweise mit Berechnungsfehlern in GPUs.
Wenn genügend Zeit zur Verfügung steht, stimmen Intel i7-3610QM und eine Nvidia GeForce GTX 660 bei gleicher Anleitung nicht überein. (cuda 5.5, compute_20, sm_20)
Man kann also zu dem Schluss kommen, dass einer der beiden einen Fehler macht.
Während einer Durchführbarkeitsstudie zur Partikelsimulation stellte ich fest, dass sich nach etwa tausend Transformationen mit doppelter Genauigkeit (Transformationen einschließlich Sinus, Cosinus, Multiplikation, Division, Addition und Subtraktion) Fehler eingeschlichen haben.
Ich gebe Ihnen einen kleinen Auszug zu vergleichender Zahlen (erste Zahl ist immer CPU, zweite 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
(Beachten Sie, dass nicht jede Transformationssequenz einen Fehler ergibt.)
Während der maximale Fehler fast vernachlässigbar ist (0.0000000000000401%)
, existiert er immer noch und trägt zum kumulativen Fehler bei.
Dieser Fehler kann nun auf einen Unterschied in der Implementierung einer der internen Bibliotheken zurückzuführen sein. In der Tat sieht es so aus, als würde die GPU lieber abrunden oder abschneiden, wo die CPU aufrundet. Merkwürdigerweise scheint dies nur bei negativen Zahlen der Fall zu sein.
Der Punkt ist jedoch, dass identische Anweisungen nicht unbedingt identische Ergebnisse liefern, selbst auf digitalen Maschinen.
Ich hoffe das hat dazu beigetragen.
EDIT als Randbemerkung: Bei GPU-Rechenfehlern könnte dies (Strg + F "Erste GPU mit ECC-Speicherunterstützung") ebenfalls von Interesse sein, obwohl es für die obigen Fehler nicht unbedingt relevant ist.