cuda计时的疑问

我用的计时函数是time.h中的clock()函数

发现各种不准啊,device端的运算时间每一次都有很大差别。

求教大家都是用什么计时会比较精准科学一点。

另问:cpu进行线程组的分配开销大不大,有没有必要把多个global函数合并成一个写。

求大神解惑!

楼主您好,强烈不建议使用它。

您可以考虑:
(1)windows上使用QueryPerformanceCounter/Frequency()
(2)Linux上使用getttimeofday()

默认情况此两者都将使用High Performance Event Counter, 能带来很好的精度。
感谢您的来访。

使用CUDA事件来进行计时

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);

// 在GPU上执行一些工作

cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime, start, stop);

得到的elapsedTime就是时间

// 在GPU上执行一些工作指的是 调用__global__函数吗

对啊,就是调用核函数,不清楚内存显存之间的拷贝能不能计时,楼主可以试试

由于CUDA事件时直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机嗲吗的混合代码计时,也就是说,如果你试图通过CUDA事件对核函数和设备内存复制之外的代码进行计时,将得到不可靠的结果。

这是在书上看到的,看来可以计时的内容就是调用核函数和内存复制