GPU 프로그래밍

GPU에서 같은 데이터의 부동소수점수 총합을 구했더니, 실행할 때마다 결과의 마지막 자릿수가 미세하게 달랐다. 가장 가능성이 높은 원인은?

  1. AGPU 연산기가 고장 났기 때문
  2. B데이터가 GPU 안에서 매번 덮어쓰이기 때문
  3. C원자 연산 등으로 더하는 순서가 실행마다 달라지고, 부동소수점 덧셈은 순서에 따라 반올림 결과가 달라지기 때문
정답과 해설 보기

정답: C. 원자 연산 등으로 더하는 순서가 실행마다 달라지고, 부동소수점 덧셈은 순서에 따라 반올림 결과가 달라지기 때문

부동소수점 덧셈은 매번 반올림이 들어가므로 (a+b)+c와 a+(b+c)의 결과가 미세하게 다를 수 있습니다. 병렬 총합에서는 어느 스레드의 값이 어떤 순서로 더해지는지가 스레드 실행 순서나 원자 연산의 도착 순서에 따라 달라집니다. 그 결과 마지막 자릿수가 실행마다 바뀝니다. 결과를 매번 같게 하고 싶다면 더하는 순서를 고정한 리덕션을 사용합니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA에서 블록당 스레드 수를 정할 때의 일반적인 기준으로 올바른 것은?
  2. 위와 같은 루프(그리드 스트라이드 루프)로 커널을 작성할 때의 이점으로 올바른 것은?
  3. CUDA 상수 메모리(constant memory)가 특히 빠르게 동작하는 것은 어떤 접근일 때인가?
  4. GPU 캐시에 대해 CPU와 비교한 일반적인 특징으로 올바른 것은?
  5. NVIDIA 이외의 GPU에서도 사용할 수 있는, GPU 등의 병렬 계산을 위한 프로그래밍 체계의 예로 올바른 것은?

이 분야의 비교