gpt4 book ai didi

cuda - 何时调用 cudaDeviceSynchronize?

转载 作者:行者123 更新时间:2023-12-03 05:52:05 27 4
gpt4 key购买 nike

什么时候真正需要调用cudaDeviceSynchronize函数?

据我从 CUDA 文档中了解到,CUDA 内核是异步的,因此我们似乎应该在每次内核启动后调用 cudaDeviceSynchronize 。但是,我尝试过使用和不使用任何 cudaDeviceSynchronize 的相同代码(训练神经网络),除了时间测量之前的代码。我发现我得到了相同的结果,但速度提高了 7-12 倍(取决于矩阵大小)。

因此,问题是除了时间测量之外是否还有其他原因使用 cudaDeviceSynchronize

例如:

  • 使用cudaMemcpy将数据从GPU复制回主机之前是否需要?

  • 如果我进行矩阵乘法,例如

    C = A * B
    D = C * F

我应该在两者之间放置cudaDeviceSynchronize吗?

从我的实验看来,我没有。

为什么cudaDeviceSynchronize使程序速度如此之慢?

最佳答案

虽然 CUDA 内核启动是异步的,但放置在一个流中的所有与 GPU 相关的任务(这是默认行为)都是按顺序执行的。

例如,

kernel1<<<X,Y>>>(...); // kernel start execution, CPU continues to next statement
kernel2<<<X,Y>>>(...); // kernel is placed in queue and will start after kernel1 finishes, CPU continues to next statement
cudaMemcpy(...); // CPU blocks until memory is copied, memory copy starts only after kernel2 finishes

因此,在您的示例中,不需要 cudaDeviceSynchronize。但是,对于调试来检测哪个内核导致了错误(如果有的话)可能很有用。

cudaDeviceSynchronize 可能会导致一些速度减慢,但 7-12x 似乎太多了。可能是时间测量存在一些问题,或者内核可能非常快,并且显式同步的开销相对于实际计算时间来说是巨大的。

关于cuda - 何时调用 cudaDeviceSynchronize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11888772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com