Aşağıdaki içerik GPU’lardaki hesaplama hatalarıyla ilgili olabilir.
Yeterli zaman verildiğinde, Intel i7-3610QM ve Nvidia GeForce GTX 660 aynı talimatlar verildiğinde birbirleriyle aynı fikirde olmayacaklar. (cuda 5.5, hesap_20, sm_20)
Böylece, ikisinden birinin hata yaptığı sonucuna varılmaya başlandı.
Bir parçacık simülasyonu sırasında fizibilite incelemesi testi sırasında, binlerce veya daha fazla çift hassas dönüşümün (günah, cos, çarpma, bölme, toplama ve çıkarma dahil dönüşümler) hataların sürünmeye başladığını fark ettim.
Size karşılaştırmanız için küçük bir sayı pasajı vereceğim (ilk sayı her zaman CPU, ikinci 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
(her dönüşüm dizisinin bir hata vermeyeceğini unutmayın)
Maksimum hata neredeyse göz ardı edilebilir olmakla birlikte, (0.0000000000000401%)
halen mevcuttur ve kümülatif hataya katkıda bulunur.
Şimdi bu hata, iç kütüphanelerden birinin uygulanmasındaki bir farktan kaynaklanıyor olabilir. Gerçekten de, GPU, CPU'nun yuvarlandığı yeri aşağı yuvarlamayı ya da kısaltmayı tercih ediyor gibi görünüyor. Merakla da, bu sadece olumsuz sayılar üzerinde gerçekleşiyor gibi görünüyor.
Ancak mesele, aynı talimatların, dijital makinelerde bile aynı sonuçları getirmesinin kesin olarak garanti edilmemesi gerektiğidir.
Umarım bu katkıda bulunmuştur.
Bir kısaltma olarak EDIT: GPU aritmetik hataları söz konusu olduğunda, bu (ctrl + f "ECC Bellek Desteğine Sahip İlk GPU") da yukarıdaki hatalarla ilgili olmamakla birlikte ilgi çekici olabilir.