【问题标题】:cudaEventRecord returning zerocudaEventRecord 返回零
【发布时间】:2012-06-05 08:05:46
【问题描述】:

我正在 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);

我也尝试打印“循环”,但它始终为零。

【问题讨论】:

    标签: performance time cuda


    【解决方案1】:

    你错过了调用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

    【讨论】:

    • 请注意它是cudaEventElapsedTime,而您写的是statr而不是start
    猜你喜欢
    • 2021-09-23
    • 2016-11-24
    • 2021-10-24
    • 2017-11-19
    • 2015-01-23
    • 2016-11-24
    • 2013-12-04
    • 2010-12-31
    • 2011-12-25
    相关资源
    最近更新 更多