cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize,cuda,Cuda,这三个功能之间有什么区别,尤其是最后两个?图书馆手册上说 请注意,此函数已弃用,因为其名称不正确 反映其行为。其功能类似于 应使用的未弃用函数cudaDeviceSynchronize() 相反 但不太清楚这意味着什么。这些都是障碍。屏障阻止代码执行超出屏障,直到满足某些条件 停止CPU/主机线程(cudaDeviceSynchronize在其中发出)中的执行,直到GPU完成所有先前请求的cuda任务(内核、数据副本等)的处理 正如您所发现的,只是cudaDeviceSynchronize的一个

这三个功能之间有什么区别,尤其是最后两个?图书馆手册上说

请注意,此函数已弃用,因为其名称不正确 反映其行为。其功能类似于 应使用的未弃用函数cudaDeviceSynchronize() 相反

但不太清楚这意味着什么。

这些都是障碍。屏障阻止代码执行超出屏障,直到满足某些条件

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

  • Cuda文档(如问题中所引用)声明其功能类似。他们不说相同,只说相似,那么你怎么知道他们是相同的呢?你能举出任何来源吗?我把“基本相同”改为“相似”。重要的一点是,它已被弃用,文档建议改用
    cudaDeviceSynchronize()
    。谢谢,当从弃用名称改为新名称时,最好知道它们之间的区别,或者文档编写者是否只是害怕采取一种立场,即它们是相同的,而不是具有不同的函数名。