cudaStreamSynchronize 与 CudaDeviceSynchronize 与 cudaThreadSynchronize

标签 cuda

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

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 任务可能完成也可能不完成。
  • 关于cudaStreamSynchronize 与 CudaDeviceSynchronize 与 cudaThreadSynchronize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485018/

    相关文章:

    cuda - 主 CUDA 上下文何时被运行时 API 销毁?

    c++ - visual studio 中的 cublas 链接

    c - 避免翘曲发散

    c++ - cudaErrorCudartUnloading(错误 29),由于 "driver shutting down"

    cuda - CUDA内核中数组的内存空间

    c++ - 在 cuda 主机代码中使用 openMP?

    algorithm - 使用 CUDA 并行冒泡排序

    c++ - 将 32 位无符号整数精确转换为 (-1;1) 范围内的 float

    cuda - 使用 Nvidia 平台为 OpenCL 配置本地(共享)内存

    不使用 device_vectors 的 Cuda 推力?