让nvidia K20c使用旧流管理方式?

时间:2013-02-11 09:53:27

标签: concurrency cuda cuda-streams

从K20开始,不同的流变为完全并发(用于边缘并发)。

但是我的程序需要旧的方式。或者我需要做很多同步来解决依赖问题。

是否可以将流管理切换为旧方式?

2 个答案:

答案 0 :(得分:6)

Asynchronous Current Execution

上的“CUDA C编程指南”部分
  

流是一系列命令(可能由不同的主机发出)   线程)按顺序执行。另一方面,不同的溪流,   可以相对于彼此无序地执行他们的命令   同时;这种行为无法保证,因此不应该   依赖于正确性(例如,内核间通信是   未定义)。

如果应用程序依赖Compute Capability 2. *和3.0实现流,则程序违反了流的定义,并且对CUDA驱动程序的任何更改(例如,每个流请求的排队)或新硬件都将破坏程序。 / p>

如果您需要临时解决方法,那么我建议将所有工作移至单个用户定义的流。这可能会影响性能,但它可能是唯一的临时解决方法。

答案 1 :(得分:1)

你能用cudaEvent_t个对象来表达内核依赖吗?

Streams and Concurrency Webinar显示了一些有关如何使用事件的快速代码段。该演示文稿的一些细节仅适用于开普勒之前的硬件,但我从原始问题中假设您已经熟悉自Fermi以来事情发生了变化,现在有多个命令队列。