我们能在内核运行期间获得按时的打印输出吗?

3
我发现 "cuPrintf" 可以在内核中使用,但 "cudaPrintfDisplay" 只能在 CPU 代码中使用。这似乎意味着只有在从内核返回后才能将 "cuPrintf" 刷新到标准输出。我的问题是:我们能在内核运行期间获得实时打印输出吗?
1个回答

9

正如您所注意到的,cuPrintf()(在计算能力>=2.0的情况下也包括printf())会在内核运行时将字符串添加到缓冲区中,而该缓冲区将在内核结束后打印出来。

我认为没有办法从内核中获取实时printf。但是,为了减少延迟,您可以尝试每次以较少的线程运行内核。由于__device__ printf()仅用于诊断或调试工具,因此任何性能损失都不应该很重要。

也许最好的方法是在CUDA调试器中运行代码并以这种方式获得即时反馈。


4
在sm_20上使用printf通常需要在输出准备好之前进行设备同步,因此目前绝对不可能实现“即时”打印输出。 - harrism

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接