【问题标题】:cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronizecudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize
【发布时间】:2012-11-21 01:27:03
【问题描述】:

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

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

但不太清楚这是什么意思。

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

    【讨论】:

    • Cuda 文档(如问题中所引用的)声明 Its functionality is similar。他们不说相同,只是相似,那你怎么知道它们是相同的?你能引用任何来源吗?
    • 我将“基本相同”改为“相似”。重要的一点是它已被弃用,文档建议改用cudaDeviceSynchronize()
    • 谢谢,当从已弃用的名称转移到新名称时,最好知道它们有何不同,或者文档编写者是否只是害怕采取相同的立场,而不是一个不同的函数名。
    猜你喜欢
    • 2014-08-17
    • 2011-09-18
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2017-06-20
    相关资源
    最近更新 更多