如何让 CUDA 的 printf 打印到任意流?
How do I get CUDA's printf to print to an arbitrary stream?
CUDA在内核中的printf()
打印到我的进程的标准输出流。现在,我想,至少,从现在开始,将打印输出重定向到一个任意的输出流。我指的是一个任意流,它不仅仅是一个文件描述符(正如这里所要求的)-我希望能够使用字符串流、日志基础设施等。
如果可能的话,我真的希望能够做一些事情,比如告诉单个内核将其printf()
输出发送到某个输出流。这可能吗?
在Windows下,CUDA在首次初始化上下文时使用活动的标准句柄。
你可以
- 打开/创建文件或命名管道
- 使用SetStdHandle(STD_OUTPUT_HANDLE,HANDLE)并在程序开始时调用cudaFree(0)或类似的函数来初始化上下文。对于驱动程序API,cuInit(0)的位置是决定性的。之后你可以
- 如果您的剩余程序需要,请将SetStdHandle重置为上一个值。CUDA将继续打印到您的设置流句柄
请注意,CUDA命令实际上是进程的第一个命令。
我相信它在Linux下也能类似地工作(可能是通过使用两个参数dup2重定向stdout)。
相关文章:
- 将时间戳打印到流的最简单方法
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 使用任意分隔符从文件流读取
- 在(任意大)流中搜索完全匹配的字符串 - C++
- 打印到控制台或字符串/流
- cout一个字符串流,但打印一个指针
- C++代码在 Gedit 中有效,但在 VS 中不起作用(它只是打印"按任意键退出......"。消息)
- 输出流打印"1",出于某种原因
- C++在不使用字符串流的情况下读取具有任意长度和格式的行的多行文件
- 使用流来打印点之后的最大十进制位置
- C++以十进制打印的模板化流字符
- C++调试打印到流会生成警告
- 如何打印可流式传输类型的 boost::变体
- C++按模块名称选择性打印 cerr 流
- 使用str()和rdbuf()打印字符串流
- 函数打印任意数量的参数
- 在调试c++程序期间调用round()函数时,GDB打印任意值
- 打印字符串流输出指针
- 如何让 CUDA 的 printf 打印到任意流?
- 当printf打印任意多的行时,freopen只打印一行(c++)