cudaDeviceSynchronize 这个同步函数性能150ms, 正常吗?求帮助

  • 4 replies
  • 122 views
创建了2个stream,用来做异步测试实验:一个流传数据,kernel计算;另一个流传数据;做了一下cudaDeviceSynchronize同步,用nvprof 查看了一下,这个函数耗时150ms , 这个性能明显不能接受,是我用的时候没有注意什么细节 还是 本身就是这么耗时;PS:我用的显卡是Tesla V100-SXM2-32GB.

Re: cudaDeviceSynchronize 这个同步函数性能150ms, 正常吗?求帮助
« 回复 #1 于: 七月 30, 2019, 02:43:28 pm »
创建了2个stream,用来做异步测试实验:一个流传数据,kernel计算;另一个流传数据;做了一下cudaDeviceSynchronize同步,用nvprof 查看了一下,这个函数耗时150ms , 这个性能明显不能接受,是我用的时候没有注意什么细节 还是 本身就是这么耗时;PS:我用的显卡是Tesla V100-SXM2-32GB.

你如果之前设备上有kernel之类的能计算上10秒钟,你看看cudaDeviceSynchronize()卡上10秒你能不能接受。

人家就这样设计的,本身就用来同步的,此时不等上一段时间还能干啥?请原谅我说的直接。

Re: cudaDeviceSynchronize 这个同步函数性能150ms, 正常吗?求帮助
« 回复 #2 于: 七月 30, 2019, 04:15:22 pm »
你如果之前设备上有kernel之类的能计算上10秒钟,你看看cudaDeviceSynchronize()卡上10秒你能不能接受。

人家就这样设计的,本身就用来同步的,此时不等上一段时间还能干啥?请原谅我说的直接。
通过nvprof显示,kernel只跑了20ms,两个Buff的传输也是20ms。但是多流同步150ms。所以这种多流只能用于Kernel运行时间特别长的吗。

Re: cudaDeviceSynchronize 这个同步函数性能150ms, 正常吗?求帮助
« 回复 #3 于: 七月 30, 2019, 06:24:09 pm »
通过nvprof显示,kernel只跑了20ms,两个Buff的传输也是20ms。但是多流同步150ms。所以这种多流只能用于Kernel运行时间特别长的吗。

一般的,你的kernel执行时间越长(或者异步传输之类的任务时间越长),则同步时候需要等待的就越久。

但我不清楚你说的这种情况(Kernel或者传输很早就完成了,同步在莫名其妙的后续占用了却很久不结束),具体的是指什么,但不妨发图看一下。

Re: cudaDeviceSynchronize 这个同步函数性能150ms, 正常吗?求帮助
« 回复 #4 于: 七月 31, 2019, 10:24:37 am »
一般的,你的kernel执行时间越长(或者异步传输之类的任务时间越长),则同步时候需要等待的就越久。

但我不清楚你说的这种情况(Kernel或者传输很早就完成了,同步在莫名其妙的后续占用了却很久不结束),具体的是指什么,但不妨发图看一下。
我已经发现问题了,有一个memcpy HostToHost操作在默认流里面,我实验的时候是从新申请了2个流,实际上是3个流同步。