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