GPU 프로그래밍

GPU 커널을 작성할 때 지켜야 할 전제로 올바른 것은?

  1. A스레드는 반드시 번호가 작은 순서로 하나씩 실행된다
  2. B블록 0이 끝날 때까지 블록 1은 반드시 시작되지 않는다
  3. C스레드나 블록이 어떤 순서로 실행될지는 정해져 있지 않으므로, 결과가 실행 순서에 좌우되지 않도록 작성한다
정답과 해설 보기

정답: C. 스레드나 블록이 어떤 순서로 실행될지는 정해져 있지 않으므로, 결과가 실행 순서에 좌우되지 않도록 작성한다

GPU는 스레드와 블록을 비어 있는 자원에 차례로 할당하므로, 실행 순서는 GPU 기종이나 부하에 따라 달라집니다. 어떤 스레드가 다른 스레드가 쓴 값을 전제로 하면 우연히 올바르게 동작해도 다른 환경에서는 틀립니다. 순서가 필요한 경우에는 블록 안에서는 __syncthreads(), 블록 사이에서는 커널을 나누고, 합산에는 원자 연산이나 리덕션을 사용합니다.

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

GPU 프로그래밍의 다른 문제

  1. GPU에서 큰 행렬을 전치(b[j][i] = a[i][j])할 때, 공유 메모리를 경유시키는 주된 목적은?
  2. CUDA에서 CPU 측 프로그램이 커널을 실행한 직후의 동작으로 일반적으로 올바른 것은?
  3. CPU와 GPU의 설계 사고방식의 차이로 올바른 것은?
  4. GPU에서 빠르게 처리할 수 있는 작업의 특징으로 가장 적절한 것은?
  5. GPU에서 실행하면 효율이 떨어지기 쉬운 처리는?

이 분야의 비교