cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

Hai*_*ang 24 cuda

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

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

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

Rob*_*lla 43

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

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