cudaEventRecord返回零

时间:2012-05-31 04:02:52

标签: performance time cuda

我正在GPU上运行图像过滤器,我需要测量程序的每个部分进行比较所需的时间。首先我尝试了time.h库,但它总是返回零。然后我读了this post

并在调用内核之前和之后在我的程序中使用了相同的代码,但它仍然返回零。谁能告诉我问题可能是什么?

这是我的代码:

cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
float Elapsed=0,Cycle;
while(count)
{
    cudaEventRecord(start,0);
    ImgFilter<<<dimGrid,dimBlock>>>...
    cudaEventRecord(stop,0);
    cudaElapsedTime(&Cycle,statr,stop);
    Elapsed += Cycle;
}
printf("Time = %f",Elapsed);

我也试过打印'循环',但它始终为零。

1 个答案:

答案 0 :(得分:3)

您错过了致电cudaEventSynchronize功能

cudaEvent_t start,stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
float Elapsed=0,Cycle;
while(count)
{
    cudaEventRecord(start,0);
    ImgFilter<<<dimGrid,dimBlock>>>...
    cudaEventRecord(stop,0);
    cudaEventSynchronize(stop);
    cudaElapsedTime(&Cycle,statr,stop);
    Elapsed += Cycle;
}
printf("Time = %f",Elapsed);

注意,设备函数在所有CUDA线程完成执行之前返回,并且在内核调用之后需要使用cudaThreadSynchronize