2013-11-22 33 views
-2

該代碼的執行時間代碼段評價1D CUFFT

cudaEventRecord(start, 0); 

    /* creates 1D FFT plan */ 
    cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH); 
    /* executes FFT processes */ 
    cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD); 

    cudaEventRecord(stop, 0); 
    cudaEventSynchronize(stop); 

措施二者由CUFFT創建一個計劃和執行時間所需的時間。

如何僅測量執行時間而不包括制定計劃所需的時間?

+3

'cufftPlan1d()'後面放''cudaEventRecord(start,0)''另外,我認爲你需要''cufftExecC2C()''後''cudaDeviceSynchronize()' –

+1

@SagarMasuti也許你應該發表你的評論作爲答案。無論如何,我反對這個問題,因爲它沒有顯示任何努力來理解這個問題。 – JackOLantern

回答

1

計算沒有計劃創建時間的執行時間所需的時間可以使用以下代碼片段進行測量。它只是重新排列你的問題。

cufftResult  cuRet ; 

/* creates 1D FFT plan */ 
cuRet = cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH); 
if (CUFFT_SUCCESS != cuRet) 
{ 
    printf ("Failed in plan creation\n") ; 
    return ; 
} 

cudaEventRecord(start, 0); 
/* executes FFT processes */ 
cuRet = cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD); 
if (CUFFT_SUCCESS != cuRet) 
{ 
    printf ("Failed in FFT execution\n") ; 
    return ; 
} 
if (cudaThreadSynchronize() != cudaSuccess) 
{ 
    printf("Failed to synchronize\n"); 
    return; 
} 

cudaEventRecord(stop, 0); 
cudaEventSynchronize(stop); 

千萬記得檢查cudaEventRecordcudaEventSynchronize的返回值,我還沒有表現出錯誤,但你可以找到合適的方法來檢查錯誤here