我发现 "cuPrintf" 可以在内核中使用,但 "cudaPrintfDisplay" 只能在 CPU 代码中使用。这似乎意味着只有在从内核返回后才能将 "cuPrintf" 刷新到标准输出。我的问题是:我们能在内核运行期间获得实时打印输出吗?
正如您所注意到的,cuPrintf()
(在计算能力>=2.0的情况下也包括printf()
)会在内核运行时将字符串添加到缓冲区中,而该缓冲区将在内核结束后打印出来。
我认为没有办法从内核中获取实时printf。但是,为了减少延迟,您可以尝试每次以较少的线程运行内核。由于__device__ printf()
仅用于诊断或调试工具,因此任何性能损失都不应该很重要。
也许最好的方法是在CUDA调试器中运行代码并以这种方式获得即时反馈。