cuda中的cudaStreamSynchronize用于单个流

时间:2014-06-11 06:49:05

标签: cuda

我对CUDA流感到困惑。我已经了解到cudaStreamSynchronize()等待特定流的GPU操作完成。对于流,如果我们称之为2个内核,则内核将按顺序执行;对于流,第一个内核将被执行,而下一个内核将在第一个内核完成后执行。

我想问的是,如果我们有一个流,是否有必要同步流? 它是否按顺序执行,无论我们是否为单个流同步它?

1 个答案:

答案 0 :(得分:5)

是,按顺序执行向同一个流(默认流或任何流)发出的 cuda调用。它们是序列化的。

在执行某些CPU代码之前,您可能仍会在某些特定情况下向该流发出同步命令,以便等待GPU活动完成。在内核调用之后立即发出的CPU代码或者在cudaMemcpyAsync之后立即发出的CPU代码通常会与前面的(cuda)调用同时执行。

一个特定情况可能是cuda错误检查。另一个具体情况可能是,如果您在零拷贝固定内存中异步进行某些CPU / GPU数据交换(不需要发出显式cudaMemcpy...调用)。

但是当发布到同一个流时,通常不需要显式同步通常cudaMemcpyAsync...kernel call...cudaMemcpyAsync模式的cuda调用。流将为您做到这一点。