다음 내용은 GPU의 계산 오류에 관한 것입니다.
충분한 시간이 주어지면 인텔 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가 반올림하거나 CPU가 반올림되는 부분을 자르는 것을 선호하는 것처럼 보입니다. 흥미롭게도 이것은 음수에서만 발생하는 것으로 보입니다.
그러나 요점은 동일한 명령어가 디지털 기기에서도 동일한 결과를 반환한다고 반드시 보장 할 필요는 없다는 것입니다.
이것이 도움이 되었기를 바랍니다.
(!) 참고로 편집 : GPU 연산 오류의 경우, 이 (CTRL + F "ECC 메모리 지원하는 최초의 GPU는") 또한 관심의 위의 오류에 반드시 관련 아니지만이 될 수 있습니다.