GPU 프로그래밍
GPU의 혼합 정밀도 계산에서 곱셈은 FP16 등 낮은 정밀도로, 합산(누적)은 FP32로 하는 경우가 많은 이유로 올바른 것은?
- A곱셈은 FP32로는 할 수 없기 때문
- B다수의 곱을 합산할 때 낮은 정밀도에서는 반올림 오차가 쌓여 작은 값이 소실되므로, 누적만은 높은 정밀도로 하기 때문
- C덧셈은 FP16으로는 할 수 없기 때문
정답과 해설 보기
정답: B. 다수의 곱을 합산할 때 낮은 정밀도에서는 반올림 오차가 쌓여 작은 값이 소실되므로, 누적만은 높은 정밀도로 하기 때문
FP16의 가수부는 10비트뿐이므로, 커진 합계에 작은 곱을 더하면 곱이 반올림으로 사라지는 경우가 있습니다. 행렬 곱에서는 수천 개의 곱을 합산하므로 이 오차가 쌓이면 결과가 크게 어긋납니다. 그래서 메모리 양과 연산기 부담이 큰 곱셈은 낮은 정밀도로 하고, 누적만 FP32로 합니다. 대부분의 텐서 코어는 이러한 형태의 곱셈-누산을 1명령으로 수행할 수 있습니다.