GPU 프로그래밍
CUDA에서 CPU 측 프로그램이 커널을 실행한 직후의 동작으로 일반적으로 올바른 것은?
- ACPU는 커널이 끝날 때까지 반드시 멈춰 아무것도 할 수 없다
- B커널은 CPU에서 실행된다
- C실행은 비동기이므로 CPU는 커널의 종료를 기다리지 않고 다음 처리로 진행하며, 결과를 사용하기 전에 동기화해야 한다
정답과 해설 보기
정답: C. 실행은 비동기이므로 CPU는 커널의 종료를 기다리지 않고 다음 처리로 진행하며, 결과를 사용하기 전에 동기화해야 한다
커널 실행은 GPU로의 명령열에 처리를 추가할 뿐이며 곧바로 CPU 측에 제어가 돌아옵니다. 그래서 CPU는 GPU가 계산하는 동안 다음 데이터 준비 등을 진행할 수 있습니다. 한편 결과를 CPU에서 읽기 전에는 cudaDeviceSynchronize나 결과 복사(같은 스트림이라면 이전 처리의 완료를 기다림)로 커널의 종료를 확인해야 합니다. 시간을 측정할 때도 동기화하지 않으면 커널 시간을 정확히 측정할 수 없습니다.