用户
 找回密码
 立即注册
发表于 2013-11-20 16:15:34
76995
我用的计时函数是time.h中的clock()函数

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

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

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

求大神解惑!
使用道具 举报 回复
发表于 2013-11-20 16:18:13
楼主您好,强烈不建议使用它。

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

默认情况此两者都将使用High Performance Event Counter, 能带来很好的精度。
感谢您的来访。
使用道具 举报 回复 支持 反对
发表于 2013-11-20 16:19:25
使用CUDA事件来进行计时
  1. cudaEvent_t start, stop;
  2. cudaEventCreate(&start);
  3. cudaEventCreate(&stop);
  4. cudaEventRecord(start, 0);

  5. // 在GPU上执行一些工作

  6. cudaEventRecord(stop, 0);
  7. cudaEventSynchronize(stop);
  8. float elapsedTime;
  9. cudaEventElapsedTime(&elapsedTime, start, stop);
复制代码
得到的elapsedTime就是时间
使用道具 举报 回复 支持 反对
发表于 2013-11-20 16:21:43
cobralw 发表于 2013-11-20 16:19
使用CUDA事件来进行计时得到的elapsedTime就是时间

// 在GPU上执行一些工作指的是 调用__global__函数吗
使用道具 举报 回复 支持 反对
发表于 2013-11-20 16:23:56
zhuxianjianqi 发表于 2013-11-20 16:21
// 在GPU上执行一些工作指的是 调用__global__函数吗

对啊,就是调用核函数,不清楚内存显存之间的拷贝能不能计时,楼主可以试试
使用道具 举报 回复 支持 反对
发表于 2013-11-20 16:26:48
由于CUDA事件时直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机嗲吗的混合代码计时,也就是说,如果你试图通过CUDA事件对核函数和设备内存复制之外的代码进行计时,将得到不可靠的结果。

这是在书上看到的,看来可以计时的内容就是调用核函数和内存复制
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册