C++ 在cuda中同步多个设备

C++ 在cuda中同步多个设备,c++,cuda,synchronization,barrier,C++,Cuda,Synchronization,Barrier,在CUDA手册中,cudaStreamSynchronize(stream)的解释中提到 阻塞,直到流完成所有操作。如果为此设备设置了cudaDeviceScheduleBlockingSync标志,则主机线程将阻塞,直到流完成其所有任务 我的问题是,这个屏障会阻止主机(即multigpu中的所有设备)执行流完成中以前发布的所有操作。我说得对吗 多gpu任务中的cudaDeviceSynchronize()呢?它阻止所有设备完成由cudaSetDevice(deviceid)设置的设备上发布的所

在CUDA手册中,
cudaStreamSynchronize(stream)
的解释中提到

阻塞,直到流完成所有操作。如果为此设备设置了cudaDeviceScheduleBlockingSync标志,则主机线程将阻塞,直到流完成其所有任务

我的问题是,这个屏障会阻止主机(即multigpu中的所有设备)执行流完成中以前发布的所有操作。我说得对吗


多gpu任务中的
cudaDeviceSynchronize()
呢?它阻止所有设备完成由
cudaSetDevice(deviceid)
设置的设备上发布的所有任务,或者阻止主机执行之前在所有设备中发布的所有操作完成?

我找到了我问题的答案,我在这里为可能面临相同问题的人提及。我引自

cudaDeviceSynchronize()
等待所有主机线程的所有流中的所有前面的命令完成

cudaStreamSynchronize()
将流作为参数,并等待给定流中所有前面的命令完成。它可用于将主机与特定流同步,从而允许其他流继续在设备上执行

cudaStreamWaitEvent()
将流和事件作为参数(有关事件的描述,请参阅事件),并使调用
cudaStreamWaitEvent()
后添加到给定流的所有命令延迟执行,直到给定事件完成


cudaStreamQuery()
为应用程序提供了一种了解流中所有前面的命令是否已完成的方法。

“我们知道,默认情况下,每个流都在特定线程上运行”——我们知道吗?@Talonmes感谢您的提问,我误解了cuda手册的解释。我纠正了我的问题。