2012-05-31 56 views
0

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

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

这是我的代码:

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); 

我也尝试打印的“周期”,但它始终为零。

回答

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

+0

非常感谢你,我会试试看。 –

+0

请注意,它是'cudaEventElapsedTime',你已经写了'statr'而不是'start'。 –