Настройка и использование технологий гетерогенных вычислений, включая стандарт OpenCL
.
Раздел содержит общие рекомендации и описание особенностей разработки программ, использующих технологии гетерогенных вычислений (преимущественно в контексте графических ускорителей).
Начиная с редакции 2020 года ОСРВ поддерживает несколько реализаций данного стандарта, зависящих от архитектуры, графического процессора и его поколения.
Вывод сведений о доступных платформах и релаизациях стандарта осуществляется при помощи утилиты clinfo.
Стандарт подразумевает использование GPU-специфичных компиляторных средств. Преимущественно на стороне целевой системы. Компилятор тесно интегрирован с OpenCL драйвером и в общем случае его настройка на целевой системе не требуется.
Для переключения между реализациями предусмотрен универсальный загрузчик, инсталлируемый по адресу /usr/lib/libOpenCL.so
. При разработке конечные программы следует линковать исключительно с этой библиотекой. Загрузчик производит поиск конфигурационных файлов *.icd
в директории:
/etc/OpenCL/vendors/
Каждый найденный конфигурационный файл характеризует загружаемую библиотеку конкретной реализации стандарта. Состав содержимого директории варьируется между архитектурами, операционными системами и их редакциями. Так, для архитектуры x86
доступны не менее двух драйверных библиотек:
# ls -1 /etc/OpenCL/vendors/intel-beignet.icdmesa.icd
При возникновении проблем с настройкой или эксплуатации драйверных библиотек имеет смысл исключить все лишние конфигурационные файлы или использовать переменную OCL_ICD_VENDORS. Это позволит упростить конфигурацию системы и уменьшить число передаточных звеньев. В ряде случаев это может несколько ускорить первичную загрузку OpenCL библиотек. |
/etc/OpenCL/vendors/
. Переменная OCL_ICD_VENDORS имеет более высокий приоритет. *.icd
файл, загрузчик будет пытаться загрузить только данный конфигурационный файл. При этом, если значение переменной не содержит слэшей, то загрузчик будет искать конфигурационный файл по адресу /etc/OpenCL/vendors/$OCL_ICD_VENDORS
(либо по адресу $OPENCL_VENDOR_PATH/$OCL_ICD_VENDORS
, если переменная OPENCL_VENDOR_PATH установлена). Если эти варианты не оказываются успешными или значение содержит слэши, загрузчик рассматривает значение в качестве относительного или абсолютного пути до конфигурационного файла.
Загрузка данной реализации драйверных OpenCL библиотек регулируется конфигурационным файлом:
/etc/OpenCL/vendors/mesa.icd
В настоящий момент стандарт OpenCL поддерживается для графических контроллеров седьмого поколения в сочетании графическими драйверами с классической архитектурой.
Перечень поддерживаемых драйверов:
Поддержка OpenCL для этих графических контроллеров доступна начиная с ОСРВ редакции 2020 года. В качестве технической основы используется адаптация официального проекта Beignet.
Загрузка данной реализации драйверных OpenCL библиотек регулируется конфигурационным файлом:
/etc/OpenCL/vendors/intel-beignet.icd
Для успешной загрузки OpenCL драйвера требуется установка переменной окружения LD_LIBRARY_PATH:
|
В качестве компилятора kernel-модулей на целевой системе используется LLVM
, поставляемый вместе с дистрибутивом ОСРВ или в составе пакетов обновления Mesa
3D
.
Поддержка прекомпилированных kernel-модулей в штатную поставку не входит и требует наличия GPU-специфичных компиляторных средств на стороне инструментальной системы. Они могут быть поставлены отдельно по запросу и в полной мере не тестировались. |
Поддержка контроллеров семейства Haswell имеет известную проблему с If you переменными __local. Для игнорирования предупреждений об этой проблеме следует указывать переменную окружения
|
Пользовательские переменные окружения
1
переменная позволяет отключить загрузку тяжеловесных компиляторных библиотек. Компиляция kernel-модулей при этом будет невозможна. 1
переменная позволяет отключить встроенную в драйверное обеспечение проверку исполнения kernel-модулей.
Поддержка OpenCL для этих графических контроллеров доступна начиная с ОСРВ редакции 2021 года в рамках графических драйверов с модульной архитектурой. Для этого требуется:
Предыдущий раздел: Руководство пользователя