2012-05-31 61 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'。 –