1. 程式人生 > >CUDA核心執行時間的測量函式

CUDA核心執行時間的測量函式

方法一:

cudaEvent_t start1;
cudaEventCreate(&start1);
cudaEvent_t stop1;
cudaEventCreate(&stop1);
cudaEventRecord(start1, NULL);
// 需要測時間的核心函式kernel;
cudaEventRecord(stop1, NULL);
cudaEventSynchronize(stop1);
float msecTotal1 = 0.0f;
cudaEventElapsedTime(&msecTotal1, start1, stop1);

方法二:
StopWatchInterface * timer_cublas;
sdkCreateTimer(&timer_cublas);
sdkStartTimer(&timer_cublas);
// 需要測時間的核心函式kernel;
cudaSyncThreads()
sdkStopTimer(&timer_cublas);
double dSeconds = sdkGetTimerValue(&timer_cublas)/((double)nIter);

關於方法二中的cudaSyncThreads()說明,如果在sdkStopTimer之前不加該函式,會導致測量時間僅僅是核函式在CPU上啟動的耗時,而沒有考慮在GPU中的耗時,使得結果和方法一小很多。所以要等CUDA啟動的GPU執行緒同步之後,才能停止計時,這樣得到的耗時才是正確的。