GPU 프로그래밍
GPU에서 같은 데이터의 부동소수점수 총합을 구했더니, 실행할 때마다 결과의 마지막 자릿수가 미세하게 달랐다. 가장 가능성이 높은 원인은?
- AGPU 연산기가 고장 났기 때문
- B데이터가 GPU 안에서 매번 덮어쓰이기 때문
- C원자 연산 등으로 더하는 순서가 실행마다 달라지고, 부동소수점 덧셈은 순서에 따라 반올림 결과가 달라지기 때문
정답과 해설 보기
정답: C. 원자 연산 등으로 더하는 순서가 실행마다 달라지고, 부동소수점 덧셈은 순서에 따라 반올림 결과가 달라지기 때문
부동소수점 덧셈은 매번 반올림이 들어가므로 (a+b)+c와 a+(b+c)의 결과가 미세하게 다를 수 있습니다. 병렬 총합에서는 어느 스레드의 값이 어떤 순서로 더해지는지가 스레드 실행 순서나 원자 연산의 도착 순서에 따라 달라집니다. 그 결과 마지막 자릿수가 실행마다 바뀝니다. 결과를 매번 같게 하고 싶다면 더하는 순서를 고정한 리덕션을 사용합니다.