Skip to main content
 首页 » 编程设计

cudaStreamSynchronize 与 CudaDeviceSynchronize 与 cudaThreadSynchronize

2024年11月24日51webabcd

这三个函数有什么区别,尤其是最后两个?图书馆手册说

Note that this function is deprecated because its name does not reflect its behavior. Its functionality is similar to the non-deprecated function cudaDeviceSynchronize(), which should be used instead.



但不是很确定是什么意思。

请您参考如下方法:

这些都是障碍。障碍阻止代码在障碍之外执行,直到满足某些条件。

  • cudaDeviceSynchronize()停止在 CPU/主机线程中执行(cudaDeviceSynchronize 在其中发出),直到 GPU 完成处理所有先前请求的 cuda 任务(内核、数据副本等)
  • cudaThreadSynchronize()正如您所发现的,只是 cudaDeviceSynchronize 的弃用版本.弃用只是意味着它现在仍然有效,但建议不要使用它(使用 cudaDeviceSynchronize 代替),将来它可能不受支持。但是cudaThreadSynchronize () 和 cudaDeviceSynchronize () 类似。
  • cudaStreamSynchronize()与上述两个函数类似,但它阻止在 CPU 主机线程中进一步执行,直到 GPU 完成处理所有先前请求的在引用流中发出的 cuda 任务。所以cudaStreamSynchronize () 将流 ID 作为其唯一参数。当 CPU 代码执行继续超出此障碍时,在其他流中发出的 cuda 任务可能完成也可能不完成。