Konten berikut mungkin tentang kesalahan perhitungan dalam GPU.
Diberi waktu yang cukup, Intel i7-3610QM dan Nvidia GeForce GTX 660 akan tidak setuju satu sama lain mengingat instruksi yang sama. (cuda 5.5, compute_20, sm_20)
Jadi, satu yang tersisa untuk menyimpulkan bahwa salah satu dari keduanya membuat kesalahan.
Selama benchmark studi kelayakan simulasi partikel saya perhatikan bahwa setelah seribu atau lebih transformasi presisi ganda (transformasi termasuk dosa, cos, perkalian, pembagian, penambahan dan pengurangan) kesalahan mulai muncul.
Saya akan memberikan Anda sedikit kutipan angka untuk dibandingkan (angka pertama selalu CPU, GPU kedua)
-1.4906010142701069
-1.4906010142701074
-161011564.55005690
-161011564.55005693
-0.13829959396003652
-0.13829959396003658
-16925804.720949132
-16925804.720949136
-36.506235247679221
-36.506235247679228
-3.3870884719850887
-3.3870884719850896
(perhatikan bahwa tidak setiap urutan transformasi menghasilkan kesalahan)
Sementara kesalahan maksimum hampir dapat diabaikan (0.0000000000000401%)
itu masih ada, dan berkontribusi terhadap kesalahan kumulatif.
Sekarang kesalahan ini mungkin disebabkan oleh perbedaan dalam implementasi salah satu pustaka intrinsik. Memang, sepertinya GPU lebih suka membulatkan atau memotong di mana CPU dibulatkan. Anehnya, ini hanya terjadi pada angka negatif.
Tetapi intinya adalah bahwa instruksi yang sama tidak selalu dijamin untuk memberikan hasil yang sama, bahkan pada mesin digital.
Saya harap ini berkontribusi.
EDIT sebagai sidenote: Dalam hal kesalahan aritmatika GPU, ini (ctrl + f "GPU Pertama dengan Dukungan Memori ECC") juga dapat menarik, meskipun tidak selalu relevan dengan kesalahan di atas.