GPGPU (Русский)

From ArchWiki

GPGPU означает Вычисления общего назначения на графических процессорах.

OpenCL

OpenCL (Open Computing Language) это открытая, безвозмездная спецификация параллельного программирования, разработанная некоммерческим консорциумом Khronos Group.

Спецификация OpenCL описывает язык программирования, общую среду, которая должна присутствовать, и C API, позволяющий программистам обращаться к этой среде.

Tip: Утилита clinfo может быть использована для списка платформ OpenCL, присутствующих устройств и свойств загрузчика ICD.

OpenCL Runtime

Для выполнения программ, использующих OpenCL, необходимо установить совместимую аппаратную среду исполнения.

AMD/ATI

  • opencl-mesa: свободная среда выполнения для AMDGPU и Radeon
  • opencl-amdAUR: ROCr OpenCL и legacy OpenCL (он же orca), перепакованные из релизов AMD для ubuntu (эквивалентно specifying opencl=rocr,legacy в ubuntu's amdgpu-install)
  • opencl-legacy-amdgpu-proAUR: Наследие OpenCL (также известное как orca), перепакованное из релизов AMD для ubuntu (эквивалентно указанию opencl=legacy в amdgpu-install для ubuntu).
  • rocm-opencl-runtimeAUR: Часть вычислительного стека AMD ROCm GPU, официально поддерживающая карты GFX8 и более поздние версии (Fiji, Polaris, Vega), с неофициальной и частичной поддержкой карт на базе Navi10 (эквивалентно specifying opencl=rocr в ubuntu's amdgpu-install).
  • amdapp-sdkAUR: AMD CPU среда выполонения

NVIDIA

Intel

  • intel-compute-runtime: также известная как среда выполнения Neo OpenCL, реализация с открытым исходным кодом для графического процессора Intel HD Graphics на платформах Gen8 (Broadwell) и последующих.
  • beignetAUR: реализация с открытым исходным кодом для GPU Intel HD Graphics на Gen7 (Ivy Bridge) и последующих платформах, которая была отменена компанией Intel в пользу драйвера NEO OpenCL, остается рекомендуемым решением для устаревших аппаратных платформ (например, Ivy Bridge, Haswell).
  • intel-openclAUR: собственная реализация для графического процессора Intel HD Graphics на Gen7 (Ivy Bridge) и последующих платформах, отмененная Intel в пользу драйвера NEO OpenCL, остается рекомендуемым решением для устаревших аппаратных платформ (например, Ivy Bridge, Haswell).
  • intel-opencl-runtimeAUR: реализация для процессоров Intel Core и Xeon. Она также поддерживает процессоры других производителей.

Прочие

  • pocl: Реализация OpenCL на базе LLVM (аппаратно независимая)

32-bit OpenCL Runtime

Для выполнения 32-битных программ, использующих OpenCL, необходимо установить совместимую аппаратную 32-битную среду исполнения.

Tip: Утилита clinfo может использоваться только для получения списка 64-битных платформ OpenCL, присутствующих устройств и свойств загрузчика ICD. Для 32-битных платформ необходимо скомпилировать clinfo для 32-бит или использовать 32-битный clinfo из проекта archlinux32.

AMD/ATI

NVIDIA

OpenCL ICD loader (libOpenCL.so)

Загрузчик OpenCL ICD должен быть библиотекой, не зависящей от платформы, которая предоставляет средства для загрузки драйверов конкретных устройств через OpenCL API. Большинство производителей OpenCL предоставляют свою собственную реализацию загрузчика OpenCL ICD, и все они должны работать с реализациями OpenCL других производителей. К сожалению, большинство производителей не предоставляют полностью обновленные ICD-загрузчики, поэтому Arch Linux решил предоставить эту библиотеку из отдельного проекта (ocl-icd), который в настоящее время предоставляет функционирующую реализацию текущего OpenCL API.

Другие библиотеки загрузчика ICD устанавливаются как часть SDK каждого производителя. Если вы хотите, чтобы использовался загрузчик ICD из пакета ocl-icd, вы можете создать файл в /etc/ld.so.conf.d, который добавляет /usr/lib в каталоги поиска динамического загрузчика программ:

/etc/ld.so.conf.d/00-usrlib.conf
/usr/lib

Это необходимо, поскольку все SDK добавляют каталоги lib своей среды выполнения в путь поиска через файлы ld.so.conf.d.

Доступными пакетами, содержащими различные OpenCL ICD, являются следующие:

Примечание: Поставщик загрузчика ICD упоминается только для идентификации каждого загрузчика, в остальном он совершенно не важен. Загрузчики ICD не зависят от производителя и могут использоваться как взаимозаменяемые (при условии, что они реализованы правильно).

OpenCL разработка

Для OpenCL разработки, минимально необходимыми дополнительными пакетами являются:

  • ocl-icd: Реализация загрузчика OpenCL ICD, соответствующая последней спецификации OpenCL.
  • opencl-headers: Заголовки API OpenCL C/C++.

SDK производителей предоставляют множество инструментов и вспомогательных библиотек:

  • intel-opencl-sdkAUR: Intel OpenCL SDK (старая версия, новые OpenCL SDK включены в INDE и Intel Media Server Studio)
  • amdapp-sdkAUR: Этот пакет устанавливается как /opt/AMDAPP и помимо файлов SDK содержит ряд примеров кода (/opt/AMDAPP/SDK/samples/). Он также предоставляет утилиту clinfo, которая перечисляет платформы и устройства OpenCL, присутствующие в системе, и отображает подробную информацию о них. Поскольку SDK сам содержит драйвер CPU OpenCL, для выполнения OpenCL на устройствах CPU (независимо от их производителя) дополнительный драйвер не требуется.
  • cuda: SDK для GPU от Nvidia, который включает поддержку OpenCL 1.1.

Реализации

Чтобы узнать, какие реализации OpenCL в настоящее время активны в вашей системе, используйте следующую команду:

$ ls /etc/OpenCL/vendors

Чтобы узнать все возможные (известные) свойства платформы OpenCL и устройств, доступных в системе, install clinfo.

Языковые привязки

SYCL

SYCL это еще один открытый и бесплатный стандарт от Khronos Group, который определяет гетерогенную модель программирования с одним источником для C++ поверх OpenCL 1.2.

SYCL состоит из исполнительной части и компилятора устройств на языке C++. Компилятор устройств может быть нацелен на любое количество и вид ускорителей. Время выполнения необходимо для возврата к чисто процессорному пути кода в случае, если реализация OpenCL не найдена.

Реализации

  • computecppAUR Собственная реализация SYCL 1.2.1 от Codeplay. В качестве целевых устройств могут использоваться SPIR, SPIR-V и экспериментально PTX (NVIDIA).
  • trisycl-gitAUR: Реализация с открытым исходным кодом, в основном под руководством компании Xilinx.
  • hipsycl-cuda-gitAUR и hipsycl-rocm-gitAUR: Бесплатная реализация, построенная на HIP от AMD вместо OpenCL. Может работать на графических процессорах AMD и NVIDIA.

Проверка наличия поддержки SPIR

Большинство реализаций SYCL способны компилировать код ускорителя в SPIR или SPIR-V. Оба эти языка являются промежуточными языками, разработанными компанией Khronos, которые могут быть использованы драйвером OpenCL. Чтобы проверить, поддерживаются ли SPIR или SPIR-V, можно использовать clinfo:

$ clinfo | grep -i spir
Platform Extensions                             cl_khr_icd cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_fp64 cl_khr_image2d_from_buffer cl_intel_vec_len_hint 
  IL version                                    SPIR-V_1.0
  SPIR versions                                 1.2

ComputeCpp дополнительно поставляется с инструментом, который суммирует соответствующую системную информацию:

$ computecpp_info
Device 0:

  Device is supported                     : UNTESTED - Untested OS
  CL_DEVICE_NAME                          : Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz
  CL_DEVICE_VENDOR                        : Intel(R) Corporation
  CL_DRIVER_VERSION                       : 18.1.0.0920
  CL_DEVICE_TYPE                          : CL_DEVICE_TYPE_CPU 

Известно, что драйверы, по крайней мере, частично поддерживают SPIR или SPIR-V, в том числе intel-compute-runtime, intel-opencl-runtimeAUR, pocl и amdgpu-pro-openclAUR[ссылка недействительна: package not found].

SYCL Development

Для установки SYCL требуется рабочая среда C++11. Существует несколько библиотек с открытым исходным кодом:

  • ComputeCpp SDK: Коллекция примеров кода, интеграция cmake для ComputeCpp
  • SYCL-DNN: Примитивы производительности нейронной сети
  • SYCL-BLAS: Примитивы производительности линейной алгебры
  • VisionCpp: Библиотека компьютерного зрения
  • SYCL Parallel STL: GPU-реализация параллельных алгоритмов C++17

CUDA

CUDA (Compute Unified Device Architecture) это NVIDIA проприетарная архитектура параллельных вычислений с закрытым исходным кодом и фреймворк. Она требует наличия графического процессора NVIDIA и состоит из нескольких компонентов:

  • Требуется:
    • Проприетарный модуль ядра NVIDIA
    • Библиотеки "драйвера" и "среды выполнения" CUDA
  • Опционально:
    • Дополнительные библиотеки: CUBLAS, CUFFT, CUSPARSE и др.
    • Инструментарий CUDA, включая компилятор nvcc
    • CUDA SDK, который содержит множество примеров кода и примеров программ CUDA и OpenCL

Модуль ядра и библиотека "драйвера" CUDA поставляются в nvidia и opencl-nvidia. Библиотека "runtime" и остальной инструментарий CUDA доступны в cuda. cuda-gdb требует установки ncurses5-compat-libsAUR, см. FS#46598.

Development

Пакет cuda устанавливает все компоненты в каталог /opt/cuda. Для компиляции кода CUDA добавьте /opt/cuda/include к пути включения в инструкциях компилятора. Например, это можно сделать, добавив -I/opt/cuda/include во флаги/опции компилятора. Чтобы использовать nvcc, обертку gcc, предоставляемую NVIDIA, добавьте /opt/cuda/bin к вашему пути.

Чтобы узнать, была ли установка успешной и запущена ли CUDA, вы можете скомпилировать CUDA сэмплы. Одним из способов проверки установки является запуск примера deviceQuery.

Языковые привязки

ROCm

ROCm (Radeon Open Compute) это архитектура и структура параллельных вычислений AMD с открытым исходным кодом. Хотя она требует наличия графического процессора AMD, некоторые инструменты ROCm не зависят от аппаратного обеспечения. См. Репозиторий ROCm для Arch Linux для получения дополнительной информации и инструкций по установке.

HIP

Это Heterogeneous Interface for Portability (HIP) это специализированная среда программирования GPU от AMD для разработки высокопроизводительных ядер на аппаратном обеспечении GPU. HIP - это API среды исполнения и язык программирования C++, который позволяет разработчикам создавать переносимые приложения на различных платформах.

  • rocm-hip-runtimeAUR: Базовая среда выполнения, пакеты для запуска приложений HIP на платформе AMD.
  • hip-runtime-amdAUR: Гетерогенный интерфейс для AMDGPU в ROCm. Поддерживает GPU от архитектуры Polaris (серия RX 500) до новейшей архитектуры AMD RDNA 2 (серия RX 6000).
  • hip-runtime-nvidiaAUR: Гетерогенный интерфейс для графических процессоров NVIDIA в ROCm.

OpenMP

Этот openmp-extrasAUR пакет предоставляет AOMP - компилятор на базе Clang/LLVM с открытым исходным кодом и добавленной поддержкой API OpenMP на графических процессорах AMD.

OpenCL

Этот rocm-opencl-runtimeAUR пакет - это часть фреймворка ROCm, предоставляющая среду выполнения OpenCL.

Поддержка изображений OpenCL

Последние версии ROCm теперь включают поддержку изображений OpenCL, используемых программами с ускорением GPGPU, такими как Darktable. ROCm с графическим драйвером AMDGPU с открытым исходным кодом - это все, что требуется. AMDGPU PRO не требуется.

$ /opt/rocm/bin/clinfo | grep -i "image support"
Image support                                   Yes

Список программного обеспечения с ускорением GPGPU

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Больше приложений могут поддерживать GPGPU (Discuss in Talk:GPGPU (Русский))

.

  • Bitcoin
  • Blender – Поддержка CUDA для графических процессоров Nvidia и поддержка HIP для графических процессоров AMD. Дополнительная информация здесь.
  • BOINC
  • FFmpeg – дополнительная информация здесь.
  • Folding@home
  • GIMP – экспериментальный - дополнительная информация здесь.
  • HandBrake
  • Hashcat
  • LibreOffice Calc – дополнительная информация здесь.
  • clinfo – Найдите все возможные (известные) свойства платформы OpenCL и устройств, доступных в системе.
  • cuda_memtestAUR – мемтест GPU. Несмотря на свое название, он поддерживает как CUDA, так и OpenCL.
  • darktable – Для работы функции OpenCL требуется не менее 1 ГБ ОЗУ на GPU и поддержка изображений (проверьте вывод команды clinfo).
  • DaVinci Resolve - нелинейный видеоредактор. Может использовать как OpenCL, так и CUDA.
  • imagemagick
  • lc0AUR - Используется для поиска нейронной сети (поддерживает tensorflow, OpenCL, CUDA и openblas).
  • opencv
  • pyritAUR
  • python-pytorch-cuda - PyTorch с бэкендом CUDA
  • tensorflow-cuda - Порт TensorFlow на CUDA
  • tensorflow-computecppAUR - Порт TensorFlow на SYCL
  • xmrig - Высокопроизводительный майнер CryptoNote на CPU и GPU (OpenCL, CUDA)

Ссылки и справочная информация