用户
 找回密码
 立即注册
jaredlu_CUDA 该用户已被删除
发表于 2013-11-28 16:45:45
80616
请教:
        自己编写的 CUDA核函数,是异步执行的,即 调用后,立即返回 host端。但如果在核函数之后,调用函数
cudaDeviceSynchronize(),则要等 device端 的核函数执行完成之后才返回到 host端。那么:
       (1)  是否可以根据这一点,由 clock() 函数来测量核函数的运行时间?命令如下:
       clock_t  time_Kernel  = 0;
       time_Kernel   -=   clock;
       Kernel<<<,>>>();
       cudaDeviceSynchronize();
       time_Kernel   +=   clock;     

       (2) 是否可以根据这一点,缩短整个程序的运行时间?如:
       程序一:
       Kernel<<<,>>>();   // CUDA核函数
       function();    // host端运行的函数
       cudaDeviceSynchronize();

       程序二:
       Kernel<<<,>>>();   // CUDA核函数
       cudaDeviceSynchronize();
       function();    // host端运行的函数

       假设 Kernel  和 function 的运行时间相等,则 程序二 的运行时间是 程序一 的两倍,是否正确?

       谢谢!

使用道具 举报 回复
发表于 2013-11-28 17:45:58
楼主您好,

关于您的问题:

(1)这样做是不可以的。因为clock()不具有跨平台性,同时可能具有一定的测量精度误差。
但您的思路是正确且非常值得赞扬的!
您可以在您的思路的基础上,考虑改用QueryPerformanceCounter()之类的函数来测量时间的。

(2)这个依然是个非常值得赞扬的思路。楼主的确用心了。
这样做是可以的,并且是推荐做的,这样尽量让GPU和CPU同时执行各自的代码。能缩短时间。

(3)如2所述,您的思路是正确的。这里的例子如果kernel和function都是20ms, 则一共需要40ms. 而您通过变换cudaDeviceSynchronize(),让总时间缩短到了20ms左右。的确是个不错的。

希望您再接再厉!
使用道具 举报 回复 支持 反对
发表于 2013-11-28 19:26:06
玫瑰幻想 发表于 2013-11-28 17:45
楼主您好,

关于您的问题:

谢谢版主,这些都是书上看到的,就是不太确定!
另外,关于(1):可否利用clock()函数测量整个程序的运行时间?(对精度没有太高的要求,只是用来计算加速比),程序如下:
    clock_t  time_Kernel  = 0;
       time_Kernel   -=   clock;

      // host端代码
    ...

       Kernel<<<,>>>();
       cudaDeviceSynchronize();

      // host端代码
    ...

       time_Kernel   +=   clock;   
使用道具 举报 回复 支持 反对
发表于 2013-11-28 19:41:42
jaredlu_CUDA 发表于 2013-11-28 19:26
谢谢版主,这些都是书上看到的,就是不太确定!
另外,关于(1):可否利用clock()函数测量整个程序的 ...

楼主您好:

我之前为您指出,任何情况下均不建议在host code里使用clock()来测试某段代码的时间。
因为除了精确性的问题,它还存在巨大的跨平台性问题。甚至在某些平台下完全不可用。

所以建议您:
(1)在Windows上使用GetPerformanceCounter()/Frequency()
(2)在Linux上使用gettimeofday()

希望您能深刻思索这点。
感谢您的夜晚来访。
使用道具 举报 回复 支持 反对
发表于 2013-11-28 20:17:20
玫瑰幻想 发表于 2013-11-28 19:41
楼主您好:

我之前为您指出,任何情况下均不建议在host code里使用clock()来测试某段代码的时间。

嗯,明白了不具有跨平台性的意思,谢谢版主,非常感谢您的耐心解答!
使用道具 举报 回复 支持 反对
发表于 2013-11-28 20:28:27
jaredlu_CUDA 发表于 2013-11-28 20:17
嗯,明白了不具有跨平台性的意思,谢谢版主,非常感谢您的耐心解答!

您客气了,服务您是我的荣幸。

感谢您的深夜来访。
使用道具 举报 回复 支持 反对
发表于 2013-11-28 20:34:27
玫瑰幻想 发表于 2013-11-28 20:28
您客气了,服务您是我的荣幸。

感谢您的深夜来访。

有版主们的不辞辛劳,我们的编程才更顺利些
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册