Следующее содержание может быть об ошибках вычислений в графических процессорах.
При наличии достаточного количества времени Intel i7-3610QM и Nvidia GeForce GTX 660 будут не соглашаться друг с другом, если будут следовать одним и тем же инструкциям. (cuda 5.5, compute_20, sm_20)
Итак, остается сделать вывод, что один из двух делает ошибку.
Во время эталона технико-экономического обоснования моделирования частиц я заметил, что после тысячи или около того преобразований с двойной точностью (преобразования, включая sin, cos, умножение, деление, сложение и вычитание) начали появляться ошибки.
Я дам вам небольшую выдержку из цифр для сравнения (первое число всегда означает процессор, второе - графический процессор)
-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 предпочитает округлять или усекать, когда процессор округляется. Любопытно также, что это, кажется, происходит только на отрицательных числах.
Но дело в том, что идентичные инструкции не обязательно дают одинаковые результаты даже на цифровых машинах.
Я надеюсь, что это способствовало.
РЕДАКТИРОВАТЬ в качестве обозначения: В случае арифметических ошибок графического процессора это (ctrl + f "Первый графический процессор с поддержкой памяти ECC") также может представлять интерес, хотя и не обязательно относится к вышеуказанным ошибкам.