GPU 프로그래밍
하나의 워프 안에서 조건 분기에 의해 스레드의 절반이 if 쪽, 나머지 절반이 else 쪽으로 갈라졌다(워프 다이버전스). 일반적으로 어떻게 실행되는가?
- A양쪽을 동시에 실행하므로 속도는 변하지 않는다
- Belse 쪽 스레드는 실행되지 않고 버려진다
- Cif 쪽과 else 쪽을 차례로 실행하고, 각각의 실행 중에는 해당하지 않는 스레드가 쉬므로 효율이 떨어진다
정답과 해설 보기
정답: C. if 쪽과 else 쪽을 차례로 실행하고, 각각의 실행 중에는 해당하지 않는 스레드가 쉬므로 효율이 떨어진다
워프의 32개 스레드는 같은 명령을 실행하므로 분기가 갈라지면, 먼저 if 쪽 명령을 if 쪽 스레드만 활성화하여 실행하고 다음으로 else 쪽을 나머지 스레드로 실행합니다. 결과는 올바르지만 각각의 실행 중에는 절반의 스레드가 아무것도 하지 않으므로 시간은 두 경로의 합이 됩니다. 워프 안에서 분기가 일치하도록 데이터나 스레드 배치를 궁리하면 효율이 높아집니다.