GPU 프로그래밍

요소 수 1000인 배열을 블록당 256스레드, 스레드당 1요소씩 처리하려 한다. 실행할 블록 수로 올바른 것은?

  1. A3
  2. B4
  3. C1000
정답과 해설 보기

정답: B. 4

1000÷256≒3.9이므로 버림하여 3블록으로 하면 256×3=768요소까지만 처리할 수 있어 나머지가 누락됩니다. 올림하여 4블록(1024스레드)을 실행하고, 남는 24스레드는 아무것도 하지 않도록 합니다. 일반적으로 "(n + 256 - 1) / 256"처럼 계산하여 올림합니다. 남는 스레드가 배열 범위 밖을 읽거나 쓰지 않도록 커널 안에서 번호를 확인해야 합니다.

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

GPU 프로그래밍의 다른 문제

  1. 위 CUDA 커널에 "if (i < n)"을 넣은 이유로 올바른 것은?
  2. NVIDIA GPU에서 32개의 스레드를 하나의 묶음으로 하여 같은 명령을 일제히 실행하는 단위를 무엇이라 하는가?
  3. GPU의 SIMT(단일 명령·다중 스레드) 방식과 CPU의 SIMD 명령의 차이로 올바른 것은?
  4. 하나의 워프 안에서 조건 분기에 의해 스레드의 절반이 if 쪽, 나머지 절반이 else 쪽으로 갈라졌다(워프 다이버전스). 일반적으로 어떻게 실행되는가?
  5. 위의 (1)과 (2)는 모두 스레드의 절반에 A, 나머지에 B를 실행시킨다. 워프 효율 측면에서 올바른 설명은? (1워프=32스레드로 한다)

이 분야의 비교