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



阅读更多
文章标签: cuda
个人分类: 技术总结与分享
想对作者说点什么? 我来说一句

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

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭