GPU 프로그래밍
GPU 커널을 작성할 때 지켜야 할 전제로 올바른 것은?
- A스레드는 반드시 번호가 작은 순서로 하나씩 실행된다
- B블록 0이 끝날 때까지 블록 1은 반드시 시작되지 않는다
- C스레드나 블록이 어떤 순서로 실행될지는 정해져 있지 않으므로, 결과가 실행 순서에 좌우되지 않도록 작성한다
정답과 해설 보기
정답: C. 스레드나 블록이 어떤 순서로 실행될지는 정해져 있지 않으므로, 결과가 실행 순서에 좌우되지 않도록 작성한다
GPU는 스레드와 블록을 비어 있는 자원에 차례로 할당하므로, 실행 순서는 GPU 기종이나 부하에 따라 달라집니다. 어떤 스레드가 다른 스레드가 쓴 값을 전제로 하면 우연히 올바르게 동작해도 다른 환경에서는 틀립니다. 순서가 필요한 경우에는 블록 안에서는 __syncthreads(), 블록 사이에서는 커널을 나누고, 합산에는 원자 연산이나 리덕션을 사용합니다.