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

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

方法一:

  1. cudaEvent_t start1;  
  2. cudaEventCreate(&start1);  
  3. cudaEvent_t stop1;  
  4. cudaEventCreate(&stop1);  
  5. cudaEventRecord(start1, NULL);  
  6. // 需要測時間的核心函式kernel;
  7. cudaEventRecord(stop1, NULL);  
  8. cudaEventSynchronize(stop1);  
  9. float msecTotal1 = 0.0f;  
  10. cudaEventElapsedTime(&msecTotal1, start1, stop1);  

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

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