从K20开始,不同的流变得完全并发(以前在边缘并发)。
但是我的程序需要旧方法。或者我需要做很多同步来解决依赖问题。
是否可以将流管理切换到旧方法?
最佳答案
关于Asynchronous Current Execution的CUDA C编程指南部分
流是命令序列(可能由不同的主机发出)
线程)按顺序执行。另一方面,不同的流
可能会相对于彼此无序地执行其命令,或者
同时这种行为不能得到保证,因此不应
依赖于正确性(例如,内核之间的通信是
未定义)。
如果应用程序依赖于流的Compute Capability 2. *和3.0实现,则该程序将违反流的定义,并且对CUDA驱动程序的任何更改(例如每个流请求的排队)或新硬件都将破坏程序。
如果您需要临时解决方法,则建议将所有工作移至单个用户定义的流。这可能会影响性能,但可能是唯一的临时解决方法。