GPU 프로그래밍

GPU의 혼합 정밀도 계산에서 곱셈은 FP16 등 낮은 정밀도로, 합산(누적)은 FP32로 하는 경우가 많은 이유로 올바른 것은?

  1. A곱셈은 FP32로는 할 수 없기 때문
  2. B다수의 곱을 합산할 때 낮은 정밀도에서는 반올림 오차가 쌓여 작은 값이 소실되므로, 누적만은 높은 정밀도로 하기 때문
  3. C덧셈은 FP16으로는 할 수 없기 때문
정답과 해설 보기

정답: B. 다수의 곱을 합산할 때 낮은 정밀도에서는 반올림 오차가 쌓여 작은 값이 소실되므로, 누적만은 높은 정밀도로 하기 때문

FP16의 가수부는 10비트뿐이므로, 커진 합계에 작은 곱을 더하면 곱이 반올림으로 사라지는 경우가 있습니다. 행렬 곱에서는 수천 개의 곱을 합산하므로 이 오차가 쌓이면 결과가 크게 어긋납니다. 그래서 메모리 양과 연산기 부담이 큰 곱셈은 낮은 정밀도로 하고, 누적만 FP32로 합니다. 대부분의 텐서 코어는 이러한 형태의 곱셈-누산을 1명령으로 수행할 수 있습니다.

이 분야 연습하기 분야로 돌아가기

GPU 프로그래밍의 다른 문제

  1. GPU에서 같은 데이터의 부동소수점수 총합을 구했더니, 실행할 때마다 결과의 마지막 자릿수가 미세하게 달랐다. 가장 가능성이 높은 원인은?
  2. CUDA에서 블록당 스레드 수를 정할 때의 일반적인 기준으로 올바른 것은?
  3. 위와 같은 루프(그리드 스트라이드 루프)로 커널을 작성할 때의 이점으로 올바른 것은?
  4. CUDA 상수 메모리(constant memory)가 특히 빠르게 동작하는 것은 어떤 접근일 때인가?
  5. GPU 캐시에 대해 CPU와 비교한 일반적인 특징으로 올바른 것은?

이 분야의 비교