我在这里有一个更大的OpenCL项目。目前我正在将调试消息打印到控制台。 将这个Debug消息放在一个文件中会很不错。
任何人都知道如何获取OpenCL内核的打印流并将其转移到文件中?
或者更好的处理调试消息的想法?
答案 0 :(得分:2)
OpenCL规范声明printf
的输出被发送到实现定义的输出流。没有办法以编程方式控制输出的位置。
如果从终端/控制台环境运行程序,则可以通过在OpenCL printf
调用中包含唯一字符串并在运行程序时过滤输出来实现所需的效果。例如,在您的内核代码中,您可以进行printf
调用,如下所示:
kernel void foo(...)
{
...
printf("OCL: ...", ...);
...
}
运行程序时,您可以使用以下命令将OpenCL printf
调用重定向到文件:
(Unix)
./foo | grep "^OCL: " >ocl_debug.txt
(Windows)
foo | findstr "OCL: " >ocl_debug.txt
答案 1 :(得分:1)
由于OpenCL的输出流是实现定义的,因此您有2个选项可将其置于文件中。第一个已经由 jprice 提出,第二个是将所有输出重定向到文件
./opencl_app &>./file.txt
让我提一个问题:printf输出的顺序不能保证与它的调用顺序相同。它在大项目调试中真的有用吗?如果您使用printf,我的猜测是您的平台是AMD或Intel。两家供应商都提供了方便的调试器,可以在内核中使用。