什么时候真正需要调用 cudaDeviceSynchronize函数。
根据我对 CUDA 文档的理解,CUDA 内核是异步的,所以似乎我们应该在每次内核启动后调用 cudaDeviceSynchronize。然而,我已经尝试了相同的代码(训练神经网络)有和没有任何 cudaDeviceSynchronize,除了一个之前的时间测量。我发现我得到了相同的结果,但是速度在7-12x 之间(取决于矩阵大小)。
因此,问题在于是否有任何理由在时间测量之外使用 cudaDeviceSynchronize。
例如:
在使用 cudaMemcpy将数据从 GPU 复制回主机之前是否需要?
如果我做矩阵乘法
C = A * B
D = C * F
should I put cudaDeviceSynchronize between both?
From my experiment It seems that I don't.
Why does cudaDeviceSynchronize slow the program so much?