在 CUDA 程序中禁用所有异步执行

jmi*_*loy 5 asynchronous cuda

根据 CUDA 编程指南,您可以通过设置环境变量 (CUDA_LAUNCH_BLOCKING=1) 在运行时禁用异步内核启动。

这是一个有用的调试工具。我还想确定使用并发内核和传输在我的代码中的好处。

我还想禁用其他并发调用,特别是cudaMemcpyAsync.

是否CUDA_LAUNCH_BLOCKING会影响这些种类除了内核启动电话?我怀疑不是。什么是最好的选择?我可以添加cudaStreamSynchronize调用,但我更喜欢运行时解决方案。我可以在调试器中运行,但这会影响时间并破坏目的。

tal*_*ies 1

设置 CUDA_LAUNCH_BLOCKING 根本不会影响流 API。如果添加一些调试代码来强制所有流代码使用流 0,则除内核调用之外的所有调用都将恢复为同步行为。