从 K20 开始,不同的流变得完全并发(以前在边缘是并发的)。
但是我的程序需要旧的方式。或者我需要做很多同步来解决依赖问题。
是否可以将流管理切换到旧方式?
从 K20 开始,不同的流变得完全并发(以前在边缘是并发的)。
但是我的程序需要旧的方式。或者我需要做很多同步来解决依赖问题。
是否可以将流管理切换到旧方式?
关于异步电流执行的 CUDA C 编程指南部分
流是按顺序执行的命令序列(可能由不同的主机线程发出)。另一方面,不同的流可能会彼此乱序或同时执行它们的命令;这种行为不能保证,因此不应该依赖于正确性(例如,内核间通信未定义)。
如果应用程序依赖于 Compute Capability 2.* 和 3.0 流的实现,那么程序就违反了流的定义,并且对 CUDA 驱动程序的任何更改(例如,每个流请求的排队)或新硬件都会破坏程序。
如果您需要临时解决方法,那么我建议将所有工作转移到单个用户定义的流中。这可能会影响性能,但它可能是唯一的临时解决方法。
你能用cudaEvent_t
对象表达内核依赖关系吗?
流和并发网络研讨会展示了一些关于如何使用事件的快速代码片段。该演示文稿的一些细节仅适用于开普勒之前的硬件,但我从最初的问题假设您已经熟悉自费米以来事情发生了怎样的变化,因为现在有多个命令队列。