打印从OpenCL内核到文件的调试消息的建议?

时间:2014-06-30 11:14:05

标签: debugging printing opencl

我在这里有一个更大的OpenCL项目。目前我正在将调试消息打印到控制台。 将这个Debug消息放在一个文件中会很不错。

任何人都知道如何获取OpenCL内核的打印流并将其转移到文件中?

或者更好的处理调试消息的想法?

2 个答案:

答案 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。两家供应商都提供了方便的调试器,可以在内核中使用。