Il seguente contenuto potrebbe riguardare errori di calcolo in GPU.
Dato un tempo sufficiente, Intel i7-3610QM e una Nvidia GeForce GTX 660 non saranno d'accordo tra loro date le stesse istruzioni. (cuda 5.5, compute_20, sm_20)
Quindi, uno è lasciato a concludere che uno dei due fa un errore.
Durante un benchmark di studio di fattibilità di simulazione di particelle ho notato che dopo un migliaio di trasformazioni di precisione doppia (trasformazioni tra cui sin, cos, moltiplicazione, divisione, addizione e sottrazione) gli errori hanno iniziato a insinuarsi.
Ti darò un piccolo estratto di numeri da confrontare (il primo numero è sempre CPU, seconda 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
(nota che non tutte le sequenze di trasformazione producono un errore)
Mentre l'errore massimo è quasi trascurabile, (0.0000000000000401%)
esiste ancora e contribuisce all'errore cumulativo.
Ora questo errore potrebbe essere dovuto a una differenza nell'implementazione di una delle librerie intrinseche. In effetti, sembra che la GPU preferisca arrotondare o troncare il punto in cui la CPU si arrotonda. Stranamente, questo sembra accadere solo sui numeri negativi.
Ma il punto è che le stesse istruzioni non sono necessariamente garantite per restituire risultati identici, anche su macchine digitali.
Spero che questo abbia contribuito.
EDIT come sidenote:
Nel caso degli errori aritmetici GPU, questo (ctrl + f "Prima GPU con supporto memoria ECC ") potrebbe anche essere di interesse, anche se non necessariamente pertinente agli errori di cui sopra.