Предложения по печати отладочных сообщений из ядра OpenCL в файл?

#debugging #printing #opencl

#отладка #печать #opencl

Вопрос:

У меня здесь более крупный проект OpenCL. В настоящее время я печатаю отладочные сообщения на консоль. Было бы неплохо иметь эти отладочные сообщения в файле.

У кого-нибудь есть идея, как получить поток печати ядра OpenCL и перенаправить его в файл?

Или, может быть, лучшая идея для обработки отладочных сообщений?

Ответ №1:

В спецификации OpenCL указано, что выходные printf данные отправляются в выходной поток, определенный реализацией. Невозможно программно контролировать, куда идет этот вывод.

Если вы запускаете программу из среды терминала / консоли, вы можете добиться желаемого эффекта, включив уникальную строку в свои printf вызовы OpenCL и фильтруя выходные данные при запуске программы. Например, в вашем коде ядра могут быть printf такие вызовы:

 kernel void foo(...)
{
  ...
  printf("OCL: ...", ...);
  ...
}
  

При запуске программы вы можете перенаправить только printf вызовы OpenCL в файл с помощью команды, подобной этой:

 (Unix)
./foo | grep "^OCL: " >ocl_debug.txt

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

Ответ №2:

Поскольку выходной поток OpenCL определяется реализацией, у вас есть 2 варианта, чтобы перенести его в файл. Первое уже предложено jprice, второе — перенаправить весь вывод в файл

 ./opencl_app amp;>./file.txt
  

Позвольте мне задать вопрос: порядок вывода printf не гарантируется таким же, как порядок его вызовов. Действительно ли это полезно при отладке большого проекта? Если вы используете printf, я предполагаю, что ваша платформа — AMD или Intel. Оба поставщика предоставляют удобные отладчики, которые можно использовать внутри ядра.

Комментарии:

1. Да, я буду копать глубже в отладчике AMD, но приятно иметь некоторую общую, легкодоступную информацию об общем состоянии.

2. На машинах AMD я использую AMD CodeXL, компонент отладчика GPU внутри CodeXL довольно удобен при отладке ядер OpenCL загрузите его здесь: developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks /…