如果内核是通过不同的流启动的,
我们可以保证每个流都不交错吗?
似乎不同的内核流交错在一起。
我想要的是发出的内核流必须等到之前启动的内核流完成其工作。
我想要这样做的原因是,不同的流内核不得污染当前正在运行的内核流使用的L2cache数据。
这可能吗?
答案 0 :(得分:1)
事件使您可以彼此同步流,而不必将其与调用CPU线程同步。您可以使用cudaEventRecord(event1, stream1)
在stream1中记录一个事件,然后使用cudaStreamWaitEvent(stream2, event1)
使stream2在继续进行之前等待该事件。如果然后在nvprof中检查您的应用程序,您会注意到始终在该事件发生的流之间的同步。
我已经看到人们设置了混乱的cudaStreamSynchronize()调用,试图使用调用CPU线程来创建流之间的同步。不要这样做。使用事件。