Quantcast
Channel: Статьи Intel Developer Zone
Viewing all articles
Browse latest Browse all 357

Использование OpenCL™ API Debugger

$
0
0

Скачать PDF

1. Введение

OpenCL™ API Debugger — это подключаемый модуль для Microsoft Visual Studio*, позволяющий отлаживать приложения OpenCL, отслеживая среду OpenCL. API Debugger — это новый компонент пакета Compute Code Builder в составе решений Intel® Integrated Native Developer Experience (Intel® INDE) и бета-версии Intel® SDK for OpenCL™ Applications 2014.

API Debugger дает разработчикам возможность просматривать список всех вызовов API OpenCL в своих приложениях; можно просматривать параметры функций, возвращаемые значения и время выполнения. Этот подключаемый модуль также позволяет просматривать различные объекты OpenCL, существующие в памяти при выполнении приложения. Дополнительные сведения о подключаемом модуле API Debugger и его возможностях см. в Руководстве пользователя бета-версии Intel® SDK для OpenCL™ Applications 2014..

В этом руководстве мы демонстрируем одну из областей применения API Debugger: отладку и обнаружение причин сбоя приложений при наличии только исходного кода ядра и двоичного файла приложения (без исходного кода со стороны хоста). Полезнейшая особенность API Debugger — способность показывать исходный код ядра, даже если оно встроено в отлаживаемое приложение. В последнем случае можно выявить источник ошибки ядра, но исправить его в отсутствие полного исходного кода приложения нельзя.

В целях демонстрации мы внесем ошибку в ядро фильтра sobel из раздела Работа с JumpStart  и покажем, как выявить эту ошибку, не имея доступа к исходному коду хоста.

2. Включение Api Debugger в Visual Studio*

Прежде всего нужно включить API Debugger в Visual Studio. Для этого щелкните Tools: Code: Builder – Optionsв Visual Studio или нажмите сочетание клавиш Ctrl+1чтобы открыть диалоговое окно конфигурации отладчика, как показано ниже.

Убедитесь, что флажок Enable OpenCL API Debuggerустановлен, затем нажмите кнопку «ОК». После включения этого подключаемого модуля можно приступить к отладке приложения.

3. Запуск приложения

Как было сказано выше, мы внесли ошибку в приложение sobel, изменив типы аргументов ядра для ширины и высоты, как показано ниже.


kernel void
sobel(__global uchar4* src, __global uchar4* dst, ushort width, ushort height)
{

При попытке запуска приложения с этим новым ядром происходит сбой приложения в момент задания аргументов ядра. При отсутствии подробной обработки ошибок такие проблемы очень сложно обнаружить без полного исходного кода. Посмотрим, как можно выполнить отладку в этом случае.

Поскольку у нас в наличии только двоичный файл приложения и ядро OpenCL, нужно каким-то образом запустить приложение для его отладки в Visual Studio. Запустите командную строку Visual Studio из меню «Пуск» или добавьте %VSINSTALLDIR%\Common7\IDE\ (где %VSINSTALLDIR% — папка, в которую установлена среда Visual Studio) в переменную среды PATH и запустите командную строку. Запустите приложение из командной строки следующим образом:


devenv <приложение>

where <приложение>полный или относительный путь к отлаживаемому приложению, например, sobel.exe.

При этом приложение должно запуститься в Visual Studio для отладки. Убедитесь, что компонент API Debugger включен, как было показано в предыдущем разделе. Запустите отладку, нажав клавишу F5. Приложение запустится, но не сможет выполняться без выполнения ядра OpenCL.

4. Представление проблем и представление трассировки

Откройте представление проблем Tools: Code: Builder: OpenCL Debugger: Problems View. В окне Problems Viewперечисляются все предупреждения и ошибки, возникшие при запуске приложения OpenCL. Наибольший интерес представляют именно ошибки (хотя стоит обращать внимание и на предупреждения). Вы увидите две ошибки, вызванные вызовом clSetKernelArg(), как показано ниже.

Но верхнее представление дает только половину информации: мы всего лишь узнаем о сбое вызова с CL_INVALID_ARG_SIZE. Теперь щелкните правой кнопкой мыши одну из ошибок и выберите Show in Trace View.

При этом появится Trace Viewс трассировкой API OpenCL.

В окне трассировки выберите Functions with arguments names and valuesв списке API Display Mode как показано ниже.

Это подробный режим отображения, в котором вы видите дополнительные сведения об API, включая количество аргументов и их размер.

Если рассмотреть ошибочные вызовы и возвращаемое значение clSetKernelArg(), становится очевидно, что при задании аргументов ядра 2 и 3 возникает какая-то проблема. Снова рассмотрим сигнатуру ядра.


kernel void
sobel(__global uchar4* src, __global uchar4* dst, ushort width, ushort height)
{



В данных представления трассировкивидно, что код задает аргументы ядра размером 4 (поскольку arg_size = 0x4 для обоих вызовов с ошибками), тогда как ядро OpenCL принимает тип данных ushort размером 2. Теперь мы знаем, что нужно исправить либо код системы, либо ядро, чтобы типы данных совпадали.

4.1 Просмотр встроенного исходного кода ядра

Как было упомянуто выше, API Debugger может отображать исходный код ядра, даже если он встроен в двоичный файл. Как и ранее, включите API Debugger и запустите приложение в Visual Studio. После перехода в отладчик откройте представление дерева объектов (Tools→Code Builder — OpenCL Debugger→Objects Tree View) и найдите узел собранной программы (например, «Program [1] (Built)»). Затем щелкните узел программы правой кнопкой мыши и выберите «Open Source Code in a new tab» для просмотра исходного кода ядра.

Обратите внимание, что показанный выше двоичный файл был собран без отладочной информации. Можно изучить исходный код ядра даже в случае, когда двоичный файл собран в режиме выпуска.

5. Заключение

В этом руководстве показано, каким образом API Debuggerпомогает выявлять причины определенных ошибок в приложениях OpenCL, особенно при недоступности исходного кода. Разумеется, API Debugger обладает гораздо более широкой функциональностью и расширяет возможности отладки Visual Studio, предоставляя средства отладки приложений OpenCL непосредственно в этой среде разработки.

 

 

Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
Copyright © 2014 Intel Corporation. All rights reserved.
*Other names and brands may be claimed as the property of others.

OpenCL and the OpenCL logo are trademarks of Apple Inc and are used by permission by Khronos.


Viewing all articles
Browse latest Browse all 357

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>