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线程同步之后,才能停止计时,这样得到的耗时才是正确的。



阅读更多
换一批

没有更多推荐了,返回首页