GPU 프로그래밍

CUDA의 __syncthreads()의 역할로 올바른 것은?

  1. AGPU의 모든 스레드를 블록에 관계없이 대기시켜 맞춘다
  2. B같은 블록의 모든 스레드가 그 지점에 도달할 때까지 대기시키고, 그때까지의 공유 메모리 쓰기가 보이도록 한다
  3. CCPU와 GPU의 시계를 맞춘다
정답과 해설 보기

정답: B. 같은 블록의 모든 스레드가 그 지점에 도달할 때까지 대기시키고, 그때까지의 공유 메모리 쓰기가 보이도록 한다

공유 메모리를 사용하는 처리에서는 어떤 스레드가 쓴 값을 다른 스레드가 읽기 전에 쓰기가 끝나 있어야 합니다. __syncthreads()는 블록의 모든 스레드가 이 지점에 도착할 때까지 기다리게 하므로, 예컨대 모두가 데이터를 공유 메모리에 읽어 들인 뒤에 계산을 시작하는 순서를 보장할 수 있습니다. 대기시킬 수 있는 것은 같은 블록의 스레드뿐입니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA에서 __syncthreads()를 "if (threadIdx.x < 16)" 안에 써서 일부 스레드만 통과하도록 했다. 일어날 수 있는 일로 올바른 것은?
  2. CUDA 공유 메모리의 뱅크 충돌에 대한 설명으로 올바른 것은?
  3. 32×32 float 표를 공유 메모리에 두고 워프의 32개 스레드로 열 방향(세로)으로 읽으면 뱅크 충돌이 발생한다. 자주 사용되는 대책은?
  4. GPU에서 큰 행렬의 곱을 계산할 때, 행렬을 작은 타일로 나누어 공유 메모리에 읽어 들이는 이유로 올바른 것은?
  5. GPU 커널에서 스레드당 레지스터 사용량이 너무 많을 때 일어날 수 있는 일로 올바른 것은?

이 분야의 비교