是否可以保证每个不同的内核流都不能交错?

时间:2019-06-11 14:27:02

标签: cuda

如果内核是通过不同的流启动的,

我们可以保证每个流都不交错吗?

似乎不同的内核流交错在一起。

我想要的是发出的内核流必须等到之前启动的内核流完成其工作。

我想要这样做的原因是,不同的流内核不得污染当前正在运行的内核流使用的L2cache数据。

这可能吗?

1 个答案:

答案 0 :(得分:1)

事件使您可以彼此同步流,而不必将其与调用CPU线程同步。您可以使用cudaEventRecord(event1, stream1)在stream1中记录一个事件,然后使用cudaStreamWaitEvent(stream2, event1)使stream2在继续进行之前等待该事件。如果然后在nvprof中检查您的应用程序,您会注意到始终在该事件发生的流之间的同步。

我已经看到人们设置了混乱的cudaStreamSynchronize()调用,试图使用调用CPU线程来创建流之间的同步。不要这样做。使用事件。