Как начать работу с OpenCL на плате ODROID-XU4 (с графическим процессором Arm Mali-T628MP6)

На прошлой неделе был рассмотрен Ubuntu 18.04 на плате ODROID-XU4, протестированы большинство заявленных функций. Однако, были оставлены без внимания функции, перечисленные в списке изменений:

Аппаратное ускорение GPU с помощью OpenGL ES 3.1 и драйверов OpenCL 1.2 для графического процессора Mali T628MP6

Хотя тестировался OpenGL ES с помощью таких инструментов, как glmark2-es2 и es2gears, а также было представлена демонстрация WebGL в Chromium,  не тестировался OpenCL, так как нам о нем мало что известно, кроме того, что он используется для GPGPU (GPU общего назначения) для ускорения таких как задач, как обработка изображений и звука. Это хороший предлог, чтобы узнать немного больше, попробовать его на плате и написать краткое руководство, как начать работу с OpenGL на оборудовании с помощью Arm Mali GPU. Цель этого обзора – показать, как запустить OpenCL, и утилиту OpenCL, не вдаваясь в нюансы кода OpenCL. Если вы хотите узнать больше о кодировании OpenCL на Arm, один из способов – проверить исходный код предоставленных образцов.

Вычиcлительная библиотека Arm и OpenCL

Поскольку мы не знали, с чего начать, перейдем на форум, где показано, как использовать Arm Compute Library для тестирования OpenCL на плате.

Соответствующий пост датирован январем 2018 года и основан на Compute Library 17.12, но вы можете проверить последнюю версию и документацию на https://arm-software.github.io/ComputeLibrary/latest/. Последняя версия – 18.03, актуальная на момент написания этого обзора, поэтому загрузим ее и попытаемся установить ее в соответствии с инструкциями:

Однако, неудача.

Взглянув на kernel log с dmesg, стало ясно, что на плате закончилась память: «Недостаточно памяти: Завершить процесс 4984 (cc1plus). Недостаточно памяти: Завершить процесс 4984 (cc1plus)». Поэтому нам пришлось настроить swap файл (1 Гб):

… появилось больше памяти…

перед перезапуском сборки с поддержкой NEON и OpenCL:

и на этот раз процесс может быть завершен:

И мы можем скопировать библиотеки в /usr/lib:

Имеется ряд образцов, рассмотрим их:

Обратите внимание, что некоторые из них относятся только к NEON и не используют OpenCL, а префикс объясняет тип образца:

  1. cl_*.cpp –> OpenCL examples
  2. gc_*.cpp –> GLES compute shaders examples
  3. graph_*.cpp –> Graph examples
  4. neoncl_*.cpp –> NEON / OpenCL interoperability examples
  5. neon_*.cpp –> NEON examples

Все образцы также были созданы и могут быть найдены в каталоге build/examples. Запускаем cl_convolution после генерации образа Raw ppm с использованием Gimp:

Он может обрабатывать фотографию (5184 x 3456) менее чем за 6 секунд. Если мы посмотрим на полученное изображение, мы увидим, что обработка OpenCL преобразует изображение в оттенки серого.

Оригинальное изображение (Слева) vs После обработки OpenCL (справа)

Повторим аналогичную операцию с convert, которое было скомпилировано без поддержки OpenCL, поэтому использует только программное обеспечение:

Это заняло чуть более 10 секунд, это почти в два раза больше времени, используемого OpenCL. Файлы изображений PPM, однако, превышают 50 Мб, поэтому часть времени используется для чтения и сохранения файла с флэш-памяти eMMC. Повторение тестов дает аналогичную производительность (~ 6 секунд против ~ 11 секунд), что незначительно.

Конечная версия convert показывает, что OpenCL не является частью доступных функций в ImageMagick:

Попробуем другой образец:

Что было сделано? Открываем файл, он выглядит так же, как и первый образец (изображение в оттенках серого), но на самом деле изображение масштабировано (50% в ширину, 50% по высоте)

Последний образец cl_sgemm управляет матрицами. Основная цель трех OpenCL (cl_xxx_ samples) заключается в том, чтобы показать, как использовать OpenCL Convolution, Events и SGEMM (Single-precision Matrix Multiple), используя вычислительную библиотеку.

Вы также можете рассмотреть другие образцы для NEON и OpenGL ES, а Arm Community опубликовала сообщение в блоге, в котором объясняется, как запустить neon_cartoon_effect на Raspberry Pi, и подробно объясняется исходный код. На самом деле вам не нужна плата RPi, так как любая Arm Board с процессором, поддерживает NEON.

clinfo Utility

clinfo – это утилита, которая выводит информацию о платформах и устройствах OpenCL в системе. Поэтому устанавливаем ее на плату

Но запуск программы не дает никакой полезной информации

Совсем не то, что ожидалось. К счастью, как настроить clinfo объясняется в ODROID Magazine,, поэтому давайте попробуем. Нам нужен драйвер фреймбуфера Mali:

и настраиваем vendor ICD file:

Теперь мы можем запустить clinfo:

Достаточно много информации, показывающей одну платформу с двумя устройствами OpenCL (и Mali-T628), поддерживающими OpenCL 1.2.

Это все для этого небольшого руководства по началу работы. Если вы действительно хотите что-то сделать с помощью OpenCL, пришло время прочитать документацию вычислительной библиотеки Arm и другие Интернет-ресурсы.

Благодарим сайт cnx-software.com за предоставленную информацию.

Оригинал статьи опубликован здесь

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments