Наступний вміст може стосуватися помилок обчислення в графічних процесорах.
Враховуючи достатньо часу, Intel i7-3610QM та Nvidia GeForce GTX 660 не погоджуватимуться між собою, даючи ті самі інструкції. (cuda 5.5, compute_20, sm_20)
Отже, залишається зробити висновок, що одна з двох робить помилку.
Під час тестування техніко-економічного обгрунтування частинок я помітив, що після тисячі або більше подвійних точних перетворень (перетворень, включаючи sin, cos, множення, ділення, додавання та віднімання) почали повзати помилки.
Я дам вам невеликий уривок чисел для порівняння (перший номер завжди CPU, другий 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
(зауважте, що не кожна послідовність перетворень призводить до помилки)
Хоча максимальна помилка майже незначна, (0.0000000000000401%)
вона все ще існує і сприяє накопичувальній помилці.
Тепер ця помилка може бути пов’язана з різницею в реалізації однієї з власних бібліотек. Дійсно, схоже на те, що GPU вважає за краще округлювати чи скорочувати там, де процесує процесор. Цікаво також, що це здається лише в негативних цифрах.
Але справа в тому, що однакові інструкції не обов'язково гарантують повернення однакових результатів навіть на цифрових машинах.
Я сподіваюся, що це сприяло.
EDIT як побічний: У випадку арифметичних помилок GPU, це (ctrl + f "Перший GPU з підтримкою ECC пам'яті") також може представляти інтерес, хоча не обов'язково стосується помилок, наведених вище.