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

Debugging 将调试消息从OpenCL内核打印到文件的建议?,debugging,printing,opencl,Debugging,Printing,Opencl,我这里有一个更大的OpenCL项目。目前我正在将调试消息打印到控制台。 将此调试消息保存在文件中会很好 有人知道如何获取OpenCL内核的打印流并将其转移到文件中吗 或者是处理调试消息的更好方法?OpenCL规范规定,printf的输出被发送到实现定义的输出流。无法通过编程控制此输出的位置 如果您是从终端/控制台环境运行程序,则可以通过在OpenCLprintf调用中包含一个唯一的字符串并在运行程序时过滤输出来实现所需的效果。例如,在内核代码中,可以有如下printf调用: kernel voi

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

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


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

OpenCL规范规定,
printf
的输出被发送到实现定义的输出流。无法通过编程控制此输出的位置

如果您是从终端/控制台环境运行程序,则可以通过在OpenCL
printf
调用中包含一个唯一的字符串并在运行程序时过滤输出来实现所需的效果。例如,在内核代码中,可以有如下
printf
调用:

kernel void foo(...)
{
  ...
  printf("OCL: ...", ...);
  ...
}
(Unix)
./foo | grep "^OCL: " >ocl_debug.txt

(Windows)
foo | findstr "OCL: " >ocl_debug.txt
运行程序时,您可以使用如下命令将OpenCL
printf
调用重定向到文件:

kernel void foo(...)
{
  ...
  printf("OCL: ...", ...);
  ...
}
(Unix)
./foo | grep "^OCL: " >ocl_debug.txt

(Windows)
foo | findstr "OCL: " >ocl_debug.txt

OpenCL规范规定,
printf
的输出被发送到实现定义的输出流。无法通过编程控制此输出的位置

如果您是从终端/控制台环境运行程序,则可以通过在OpenCL
printf
调用中包含一个唯一的字符串并在运行程序时过滤输出来实现所需的效果。例如,在内核代码中,可以有如下
printf
调用:

kernel void foo(...)
{
  ...
  printf("OCL: ...", ...);
  ...
}
(Unix)
./foo | grep "^OCL: " >ocl_debug.txt

(Windows)
foo | findstr "OCL: " >ocl_debug.txt
运行程序时,您可以使用如下命令将OpenCL
printf
调用重定向到文件:

kernel void foo(...)
{
  ...
  printf("OCL: ...", ...);
  ...
}
(Unix)
./foo | grep "^OCL: " >ocl_debug.txt

(Windows)
foo | findstr "OCL: " >ocl_debug.txt

由于OpenCL的输出流是实现定义的,所以您有两个选项将其放入文件中。第一个已经由jprice提出,第二个是将所有输出重定向到文件中

./opencl_app &>./file.txt

让我问一个问题:printf输出的顺序不能保证和它调用的顺序相同。它在大项目调试中真的有帮助吗?如果您使用的是printf,我猜您的平台是AMD或Intel。这两个供应商都提供了方便的调试器,可以在内核内部使用。

由于OpenCL的输出流是实现定义的,您有两个选项可以将其放入文件中。第一个已经由jprice提出,第二个是将所有输出重定向到文件中

./opencl_app &>./file.txt

让我问一个问题:printf输出的顺序不能保证和它调用的顺序相同。它在大型项目调试中真的有用吗?如果您使用的是printf,我猜您的平台是AMD或Intel。这两个供应商都提供方便的调试器,可以在内核中使用。

是的,我将深入研究AMD调试器,但很高兴有一些通用的、易于访问的通用状态信息。在AMD机器上,我使用AMD CodeXL,CodeXL中的GPU调试器组件在调试OpenCL内核时非常方便。请下载:是的,我将深入研究AMD调试器,但很高兴有一些通用的、易于访问的通用状态信息。在AMD机器上,我使用AMD CodeXL,CodeXL中的GPU调试器组件在调试OpenCL内核时非常方便。请在此处下载: