做CUDA事件时间cudaMalloc和cudaMemcpy执行?

时间:2012-01-21 07:14:52

标签: cuda gpu cpu-usage nvidia timing

我使用以下代码来定时拨打cudaMalloc()。我很好奇:CUDA事件只是我们内核的时间,或者它们也是“内置内核”的时间。换句话说,以下用于计时cudaMalloc()的方法是否有效?

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
for(int t =0 ; t < 100 ; t++){
    float* test;
    cudaMalloc((void**)&test, 3000000 * sizeof(float));
    cudaFree(test);
}
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime; 
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("time elapsed on the GPU: %f ms", elapsedTime/100);

1 个答案:

答案 0 :(得分:2)

cu(da)EventRecord()只是向GPU提交命令,告诉GPU在GPU处理命令时写入时间戳。时间戳只是一个板载高分辨率计数器。因此,当用作GPU上事件计时的异步机制时,CUDA事件最有用,例如特定内核运行多长时间。 CUDA内存管理主要发生在CPU上,因此CUDA事件不适合定时CUDA分配和自由操作。

简而言之:最好使用基于CPU的时序,如gettimeofday()。