GPU 프로그래밍

매우 작은 커널을 수천 번 연속으로 실행하는 프로그램이 느릴 때, 개선 방법으로 가장 적절한 것은?

  1. A여러 작은 커널을 하나로 합치는(융합) 등으로 실행 횟수를 줄인다
  2. B커널 실행 사이에 대기 시간을 넣는다
  3. C블록당 스레드 수를 1로 한다
정답과 해설 보기

정답: A. 여러 작은 커널을 하나로 합치는(융합) 등으로 실행 횟수를 줄인다

커널 실행에는 CPU 측 처리와 GPU 준비로 수 마이크로초 정도의 고정 시간이 걸립니다. 커널의 실제 처리가 그보다 짧으면 실행 오버헤드만 두드러집니다. 여러 처리를 하나의 커널로 합치면 실행 횟수가 줄어들 뿐 아니라, 중간 결과를 메모리에 쓰고 다시 읽는 부담도 없앨 수 있습니다. 실행 순서열을 한꺼번에 기록해 두었다가 한 번에 보내는 방식(CUDA Graphs 등)도 사용됩니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA 유니파이드 메모리(통합 메모리)에 대한 설명으로 올바른 것은?
  2. GPU에서 두 개의 큰 배열의 요소별 덧셈(c[i] = a[i] + b[i])을 수행할 때, 성능을 주로 결정하는 것은?
  3. 가정용 게임 GPU 대부분에서 배정밀도(FP64) 연산 성능이 단정밀도(FP32)보다 훨씬 낮은(수십 분의 일 등) 이유로 가장 적절한 것은?
  4. 최근 GPU에 탑재된 텐서 코어(행렬 연산 유닛)의 특징으로 올바른 것은?
  5. GPU의 혼합 정밀도 계산에서 곱셈은 FP16 등 낮은 정밀도로, 합산(누적)은 FP32로 하는 경우가 많은 이유로 올바른 것은?

이 분야의 비교