cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

时间:2012-11-21 01:27:03

标签: cuda

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

  

请注意,此函数已弃用,因为其名称不允许   反映其行为。它的功能类似于   应该使用的不推荐使用的函数cudaDeviceSynchronize()   代替。

但不太确定它是什么意思。

1 个答案:

答案 0 :(得分:41)

这些都是障碍。在某些条件得到满足之前,障碍会阻止代码执行超出障碍。

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