我用的计时函数是time.h中的clock()函数
发现各种不准啊,device端的运算时间每一次都有很大差别。
求教大家都是用什么计时会比较精准科学一点。
另问:cpu进行线程组的分配开销大不大,有没有必要把多个global函数合并成一个写。
求大神解惑!
我用的计时函数是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事件对核函数和设备内存复制之外的代码进行计时,将得到不可靠的结果。
这是在书上看到的,看来可以计时的内容就是调用核函数和内存复制