#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 /…