这三个函数,特别是最后两个函数有什么区别?图书馆手册说
请注意,此函数已被弃用,因为它的名称不
反映其行为。它的功能类似于
未弃用的函数 cudaDeviceSynchronize(),应使用
反而。
但不太确定这是什么意思。
这些都是barriers。屏障会阻止代码执行超出屏障,直到满足某些条件。
-
cudaDeviceSynchronize() http://docs.nvidia.com/cuda/cuda-runtime-api/index.html#group__CUDART__DEVICE_1g32bdc6229081137acd3cba5da2897779停止 CPU/主机线程(cudaDeviceSynchronize 发出的线程)中的执行,直到 GPU 完成处理所有先前请求的 cuda 任务(内核、数据副本等)
-
cudaThreadSynchronize() http://docs.nvidia.com/cuda/cuda-runtime-api/index.html#group__CUDART__THREAD__DEPRECATED_1g6e0c5163e6f959b56b6ae2eaa8483576正如您所发现的,这只是一个已弃用的版本
cudaDeviceSynchronize
。已弃用仅意味着它目前仍然有效,但建议不要使用它(而是使用 cudaDeviceSynchronize),并且将来它可能会不受支持。但cudaThreadSynchronize
() and cudaDeviceSynchronize
() 相似。
-
cudaStreamSynchronize() http://docs.nvidia.com/cuda/cuda-runtime-api/index.html#group__CUDART__STREAM_1geb3b2f88b7c1cff8b67a998a3a41c179与上面两个函数类似,但它阻止在CPU主机线程中进一步执行,直到GPU完成处理所有先前请求的cuda任务在引用的流中发布的. So
cudaStreamSynchronize
() 将流 id 作为其唯一参数。当 CPU 代码执行继续超出此障碍时,在其他流中发出的 cuda 任务可能会也可能不会完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)