30

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

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

但不太清楚是什么意思。

4

1 回答 1

52

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

  1. cudaDeviceSynchronize()暂停 CPU/主机线程(发出 cudaDeviceSynchronize 的线程)中的执行,直到 GPU 完成处理所有先前请求的 cuda 任务(内核、数据副本等)
  2. 如您所见, cudaThreadSynchronize()cudaDeviceSynchronize只是. Deprecated 只是意味着它现在仍然有效,但建议不要使用它(使用 cudaDeviceSynchronize 代替),将来可能会不受支持。但是cudaThreadSynchronize() 和cudaDeviceSynchronize() 是相似的。
  3. cudaStreamSynchronize()类似于上述两个函数,但它会阻止 CPU 主机线程中的进一步执行,直到 GPU 完成处理所有先前请求的在引用流中发出的cuda 任务。所以cudaStreamSynchronize() 将流 id 作为其唯一参数。当 CPU 代码执行继续超出此障碍时,在其他流中发出的 cuda 任务可能会或可能不会完成。
于 2012-11-21T03:28:20.007 回答