GPU 프로그래밍
위 CUDA 커널에 "if (i < n)"을 넣은 이유로 올바른 것은?
__global__ void add(float *c, const float *a,
const float *b, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n)
c[i] = a[i] + b[i];
}
- A스레드 총수가 요소 수보다 많을 때, 남는 스레드가 배열 범위 밖을 읽거나 쓰지 않도록 하기 위해
- B덧셈 결과가 n을 넘지 않도록 하기 위해
- CGPU 속도를 2배로 하기 위해
정답과 해설 보기
정답: A. 스레드 총수가 요소 수보다 많을 때, 남는 스레드가 배열 범위 밖을 읽거나 쓰지 않도록 하기 위해
스레드는 블록 단위로 실행되므로 요소 수가 블록 크기의 배수가 아니면 스레드 총수가 요소 수를 넘습니다. 번호를 확인하지 않고 쓰면 할당된 배열 밖의 메모리를 망가뜨리거나 잘못된 접근으로 오류가 발생합니다. "i < n" 확인은 GPU 커널을 작성할 때 거의 정해진 형태입니다.