GPU 프로그래밍

GPU의 메모리 병합 접근(코얼레싱)에 대한 설명으로 올바른 것은?

  1. A두 개의 GPU 메모리를 하나로 합쳐 용량을 2배로 한다
  2. B메모리의 데이터를 압축하여 용량을 늘린다
  3. C워프 안의 인접한 스레드가 인접한 주소를 읽으면 적은 횟수의 메모리 접근으로 한꺼번에 처리된다
정답과 해설 보기

정답: C. 워프 안의 인접한 스레드가 인접한 주소를 읽으면 적은 횟수의 메모리 접근으로 한꺼번에 처리된다

GPU 메모리는 32바이트나 128바이트 등 일정한 단위로 읽고 씁니다. 워프의 32개 스레드가 각각 4바이트씩 연속된 주소를 읽으면 합계 128바이트 덩어리를 1회~수 회의 접근으로 읽을 수 있습니다. 주소가 흩어져 있으면 스레드마다 다른 덩어리를 읽게 되어 사용하지 않는 데이터까지 옮기므로 유효 대역폭이 몇 분의 일로 떨어집니다.

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

GPU 프로그래밍의 다른 문제

  1. 각 스레드의 번호를 i로 하여, 위와 같이 32요소 간격으로 배열을 읽으면 a[i]를 읽는 경우보다 느려진다. 주된 이유는?
  2. 입자의 위치 x, y, z를 가진 데이터를 GPU에서 처리할 때, 메모리 병합 접근 측면에서 유리한 배치는?
  3. CUDA 공유 메모리(shared memory)의 특징으로 올바른 것은?
  4. CUDA의 __syncthreads()의 역할로 올바른 것은?
  5. CUDA에서 __syncthreads()를 "if (threadIdx.x < 16)" 안에 써서 일부 스레드만 통과하도록 했다. 일어날 수 있는 일로 올바른 것은?

이 분야의 비교