什么时候真正需要调用 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?