VTune Amplifier 2016 можно использовать для анализа программ OpenCL. В этой статье вы узнаете, как использовать это решение, а также как создать простую программу OpenCL под названием HelloOpenCL с помощью Microsoft Visual Studio и Intel OpenCL code builder.
OpenCL — открытый стандарт, предназначенный для реализации параллельного программирования на гетерогенных системах, например в системах с ЦП, GPU, цифровыми сигнальными процессорами, FPGA и другими физическими устройствами. Любые приложения OpenCL обычно содержат две версии кода: для хоста и для устройства (”device kernel” или «ядер»). Хостовые API содержат API двух типов. API платформы предназначены для проверки доступных устройств и их возможностей, с целью выбора и инициализации устройств OpenCL. API среды выполнения используются для настройки и выполнения ядер на выбранных устройствах. Для разработки кода устройств, выполняемых в среде выполнения OpenCL, можно использовать сборщик кода среды разработки Intel OpenCL. У различных поставщиков оборудования собственная реализация среды выполнения OpenCL. Поэтому обратите внимание на то, чтобы была установлена именно нужная среда.
Анализ VTune OpenCL поможет определить, какие ядра OpenCL затрачивают больше всего времени и насколько часто происходит вызов этих ядер. Кроме того, копирование данных между разными аппаратными компонентами также занимает определенное время из-за переключения аппаратного контекста. В VTune метрики чтения и записи памяти OpenCL помогут проанализировать задержки, вызванные доступом к памяти. В следующих разделах мы рассмотрим создание простой программы HelloOpenCL и использование анализа VTune OpenCL с новой функцией схемы архитектуры.
Запустите первую программу OpenCL для GPU — HelloOpenCL
Перед началом разработки программы HelloOpenCL нужно загрузить ряд компонентов. Для сборки кода ядра и проверки совместимости платформы можно загрузить Intel OpenCL code builder, содержащийся в пакете INDE. Во-вторых, на целевое устройство нужно установить реализацию среды выполнения OpenCL. Реализация Intel OpenCL входит в состав графического пакета Intel. Загрузить драйвер можно здесь. Посетите эту страницу для получения инструкций и других вариантов загрузок.
После установки Intel OpenCL code builder можно проверить, какие устройства OpenCL он поддерживает. Эта тестовая целевая система оборудована процессорами Intel Core 4-го поколения (Haswell).
Убедившись, что среда поддерживает нужные устройства OpenCL, как показано на приведенном выше рисунке, можно использовать Microsoft Visual Studio Professional 2013 для создания вашей первой программы OpenCL с помощью установленного шаблона HelloOpenCL, либо использовать непосредственно тот образец кода, который мы включили в данную статью. Этот образец кода запрашивает у устройства GPU выполнение математической операции сложения для двух двухмерных буферов; суммой являются двухмерные выходные буферы. Такой сценарий работы может применяться при использовании типовых фильтров изображений. Вот образец кода HelloOpenCL.
Профилирование HelloOpenCL с помощью VTune Amplifier 2016
После успешной сборки программы HelloOpenCL можно запустить VTune для профилирования приложения в среде разработки Visual Studio. Подробное описание действий по настройке профилирования OpenCL в VTune см. на следующем рисунке.
- Запустите VTune в среде разработки VS 2013.
- Выберите типа анализа Advanced Hotspots.
- Выберите события доступа к памяти графического оборудования.
- Установите флажок программ OpenCL.
После успешного сбора журналов VTune вы увидите показанный ниже график анализа VTune, перейдя на вкладку Graphics. Сведения о функциях см. в следующих указателях.
- VTune содержит несколько групповых представлений списка вызовов функций. Для программы openCL для GPU имеется групповое представление Computing Task Purpose/*, позволяющее лучше пояснить эффективность API OpenCL с помощью метрик, поддерживающих OpenCL.
- Эти аннотации служат для описания кодов API системы OpenCL, выполняющихся на стороне CPU. Они также предоставляют сведения о том, сколько времени CPU занимает одна функция задачи. clBuildProgram интерпретирует код ядра в программу, которую можно запустить в среде выполнения OpenCL. clCreateKernel выбирает одну функцию ядра в предыдущей собранной программе OpenCL, которая может содержать несколько функций ядра. clEnqueueNDRange помещает определенную функцию ядра в очередь команд OpenCL, из которой эта команда принимается и обрабатывается графическим процессором.
- На этой временной шкале Intel HD Graphics 4… показано, что Add — функция ядра, запланированная в реализации среды выполнения на GPU Intel.
- Она подсвечивается, когда на оборудовании GPU происходит фактическое действие Add. Между плановым временем выполнения функции ядра и фактическим временем ее выполнения существует промежуток, вызванный определенной подготовкой и переключением контекста.
- Это новая функция, доступная в последней версии VTune Amplifier 2016. Как показано на следующем рисунке, здесь отображается эффективность передачи данных с помощью статической формы данных и представлены данные о скорости потоков данных в общей схеме архитектуры GPU. Скорость чтения нетипизированной памяти вдвое выше скорости записи, что совпадает с поведением приложения HelloOpenCL.
По этой схеме архитектуры можно также следить за работой буферов, которые в приложении HelloOpenCL выделяются в кэше 3-го уровня. Эффективность использования GPU можно существенно повысить, поскольку большую часть времени GPU бездействует. Другими словами, устройство Intel OpenCL может выполнять более сложные задачи.