何时cudaDeviceSynchronize
真正需要调用该函数?
据我从CUDA文档中了解,CUDA内核是异步的,因此似乎我们应该cudaDeviceSynchronize
在每次内核启动后调用。但是,我尝试了相同的代码(训练神经网络),无论有无cudaDeviceSynchronize
,除了时间测量之前的代码。我发现我得到了相同的结果,但是速度提高了7-12倍(取决于矩阵大小)。
因此,问题是是否有任何理由需要使用cudaDeviceSynchronize
时间测量。
例如:
在将数据从GPU复制回主机之前是否需要
cudaMemcpy
?如果我做矩阵乘法
C = A * B D = C * F
我应该cudaDeviceSynchronize
介于两者之间吗?
从我的实验看来,我没有。
为什么cudaDeviceSynchronize
程序会这么慢?