GPU 프로그래밍

GPU의 SIMT(단일 명령·다중 스레드) 방식과 CPU의 SIMD 명령의 차이로 올바른 것은?

  1. ASIMT는 하나의 데이터에 여러 명령을 동시에 수행하고, SIMD는 하나의 명령을 하나의 데이터에 수행한다
  2. BSIMT와 SIMD는 완전히 같은 것이며 이름만 다르다
  3. CSIMT에서는 각 스레드를 독립된 프로그램으로 작성할 수 있고 분기도 하드웨어가 처리하지만, SIMD에서는 프로그래머나 컴파일러가 폭이 정해진 벡터 명령을 명시적으로 사용한다
정답과 해설 보기

정답: C. SIMT에서는 각 스레드를 독립된 프로그램으로 작성할 수 있고 분기도 하드웨어가 처리하지만, SIMD에서는 프로그래머나 컴파일러가 폭이 정해진 벡터 명령을 명시적으로 사용한다

CPU의 SIMD에서는 4개나 8개의 데이터를 묶은 벡터 레지스터에 하나의 명령을 적용하므로, 프로그램은 벡터 폭을 의식하여 작성합니다. GPU의 SIMT에서는 프로그래머가 하나의 스레드 처리를 평범하게 작성하면 하드웨어가 32개씩 묶어 같은 명령으로 실행합니다. 스레드별로 분기해도 되며 하드웨어가 갈라진 경로를 차례로 실행하지만, 이때는 효율이 떨어집니다.

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

GPU 프로그래밍의 다른 문제

  1. 하나의 워프 안에서 조건 분기에 의해 스레드의 절반이 if 쪽, 나머지 절반이 else 쪽으로 갈라졌다(워프 다이버전스). 일반적으로 어떻게 실행되는가?
  2. 위의 (1)과 (2)는 모두 스레드의 절반에 A, 나머지에 B를 실행시킨다. 워프 효율 측면에서 올바른 설명은? (1워프=32스레드로 한다)
  3. GPU의 메모리 병합 접근(코얼레싱)에 대한 설명으로 올바른 것은?
  4. 각 스레드의 번호를 i로 하여, 위와 같이 32요소 간격으로 배열을 읽으면 a[i]를 읽는 경우보다 느려진다. 주된 이유는?
  5. 입자의 위치 x, y, z를 가진 데이터를 GPU에서 처리할 때, 메모리 병합 접근 측면에서 유리한 배치는?

이 분야의 비교