對CUDA核心函式執行時間測量的方法
阿新 • • 發佈:2018-12-30
方法一:
- 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執行緒同步之後,才能停止計時,這樣得到的耗時才是正確的。