cudaEvent_t
의 사용법에 대해 다소 혼란 스럽습니다. 현재, 나는 커널 통화 시간을 찾기 위해이 같은 clock()
전화를 사용하고 있습니다 :CUDA : cudaEvent_t 및 cudaThreadSynchronize 사용량
cudaThreadSynchronize();
clock_t begin = clock();
fooKernel<<< x, y >>>(z, w);
cudaThreadSynchronize();
clock_t end = clock();
// Print time difference: (end - begin)
을 내가 cudaEvent_t
사용을 고려하고 높은 해상도의 타이머를 찾고. cudaEventRecord()
을 사용하여 시간을 기록하기 전에 cudaThreadSynchronize()
으로 전화해야합니까, 아니면 중복되어 있습니까?
이벤트가 기록 될 때까지 기다리는 것처럼 보이는 또 다른 호출 cudaEventSynchronize()
이 있기 때문에 내가 묻는 이유가 있습니다. 레코딩이 지연되면 커널이 실행을 마친 후 계산 된 시간 차이가 약간의 추가 시간을 나타내지 않습니까?
LumpN : 왜 이벤트가 곧 녹음되지 않는가? cudaEventRecord가 호출되는 이유는 무엇입니까? 해당 호출에 기록되지 않은 경우 해당 커널에서 걸리는 시간을 어떻게 나타낼 수 있습니까? –
@Ashwin : 이벤트는 FIFO처럼 작동하는 스트림의 맨 위에 도달하면 기록됩니다. cudaEventRecord를 호출하면 이벤트를 스트림으로 푸시합니다. 이벤트보다 먼저 스트림에 작업이있는 경우, 이벤트는 앞선 모든 작업이 완료 될 때까지 스트림 FIFO에 처리되지 않은 상태로 저장됩니다. 이러한 모든 호출은 호출하는 호스트 스레드와 관련하여 비동기 적입니다. – talonmies