Використання OpenCL™ API Debugger, Intel® Software
1.Запровадження
OpenCL™ API Debugger — це модуль, що підключається для Microsoft Visual Studio*, що дозволяє налагоджувати програми OpenCL, відстежуючи середовище OpenCL. API Debugger — це новий компонент пакету Compute Code Builder у складі рішення бета-версії 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, змінивши типи аргументів ядра для ширини та висоти, як показано нижче.
При спробі запуску програми з новим ядром відбувається збій програми в момент завдання аргументів ядра. За відсутності докладної обробки помилок, такі проблеми дуже складно виявити без повного вихідного коду. Подивимося, як можна виконати налагодження у цьому випадку.
Оскільки у нас є лише двійковий файл програми та ядро OpenCL, потрібно якимось чином запустити програму для його налагодження у Visual Studio. Запустіть командний рядок Visual Studio з меню «Пуск» або додайте %VSINSTALLDIR%\Common7\IDE\ (де %VSINSTALLDIR% — папка, в яку встановлено середовище Visual Studio) до змінного середовища PATH і запустіть командний рядок. Запустіть програму з командного рядка так:
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 виникає якась проблема. Знову розглянемо сигнатуру ядра.
У данихподання трасування видно, що код задає аргументи ядра розміром 4 (оскільки arg_size = 0x4 для обох викликів з помилками), тоді як ядро OpenCL приймає тип даних ushort розміром 2. Тепер ми знаємо, що потрібно виправити або код системи або ядро, щоб типи даних збігалися.
4.1 Перегляд вбудованого коду ядра

Зверніть увагу, що наведений вище двійковий файл був зібраний без налагоджувальної інформації. Ви можете вивчити вихідний код ядра, навіть якщо двійковий файл зібрано в режимі випуску.
5. Висновок
У цьому посібнику показано, якAPI Debugger допомагає виявляти причини певних помилок у програмах OpenCL, особливо при недоступності вихідного коду. Зрозуміло, API Debugger має набагато ширшу функціональність і розширює можливості налагодження Visual Studio,надаючи засоби налагодження програм OpenCL безпосередньо у цьому середовищі розробки.
OpenCL і OpenCL логотипи є торговими марками Apple Inc і використовуються за допомогою Khronos.