GPGPU (Русский)
GPGPU (General-purpose computing on graphics processing units) — неспециализированные вычисления на графических процессорах. Другими словами, это означает выполнение на видеокарте вычислений, не относящихся непосредственно к графике.
OpenCL
OpenCL (Open Computing Language) — это открытая, не требующая лицензионных отчислений спецификация параллельного программирования, разработанная некоммерческим консорциумом Khronos Group.
Спецификация OpenCL описывает язык программирования, общую среду, которая должна присутствовать, и C API, позволяющий программистам обращаться к этой среде.
Среда выполнения
Для выполнения программ, использующих OpenCL, необходимо установить совместимую аппаратную среду выполнения.
AMD/ATI
- opencl-mesa[ссылка недействительна: package not found]: свободная среда выполнения для AMDGPU и ATI
-
opencl-amdAUR, opencl-amd-devAUR: ROCr OpenCL и legacy OpenCL (он же orca), перепакованные из релизов AMD для ubuntu (эквивалентно указанию
opencl=rocr,legacy
в ubuntu amdgpu-install) -
opencl-legacy-amdgpu-proAUR: legacy OpenCL (также известное как orca), перепакованное из релизов AMD для ubuntu (эквивалентно указанию
opencl=legacy
в amdgpu-install для ubuntu). -
rocm-opencl-runtime: Часть вычислительного стека AMD ROCm GPU, официально поддерживающая карты GFX8 и более поздние версии (Fiji, Polaris, Vega), с неофициальной и частичной поддержкой карт на базе Navi10 (похоже, но не эквивалентно указанию
opencl=rocr
в ubuntu amdgpu-install, потому что версия rocm этого пакета отличается от версии установщика ubuntu). Для поддержки карт старше Vega нужно установить переменную времени выполненияROC_ENABLE_PRE_VEGA=1
. - amdapp-sdkAUR: AMD CPU среда выполнения
NVIDIA
- opencl-nvidia: официальная среда выполнения 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 (аппаратно независимая)
Компилятор и транслятор позволяют запускать приложения OpenCL в среде Vulkan.
- clspv-gitAUR: прототип компилятора подмножества OpenCL C для вычислительных шейдеров Vulkan.
- clvk: прототип реализации OpenCL 3.0 поверх Vulkan с использованием clspv в качестве компилятора.
- xrt-binAUR: Xilinx Run Time для FPGA xrt
- fpga-runtime-for-opencl: FPGA Runtime
32-битная среда выполнения
Для выполнения 32-битных программ, использующих OpenCL, необходимо установить совместимую аппаратную 32-битную среду выполнения.
AMD/ATI
- lib32-opencl-mesa[ссылка недействительна: package not found]: свободная среда выполнения для AMDGPU и Radeon (32 бита)
- lib32-opencl-legacy-amdgpu-proAUR: legacy OpenCL (он же orca), перепакованный из выпусков ubuntu от AMD (32 бита)
NVIDIA
- lib32-opencl-nvidia: официальная среда выполнения NVIDIA (32 бита)
Загрузчик ICD (libOpenCL.so)
ICD Loader должен быть библиотекой, не зависящей от платформы, которая предоставляет средства для загрузки драйверов конкретных устройств через 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:
- ocl-icd: рекомендуется, самый актуальный
- intel-openclAUR от Intel. Обеспечивает OpenCL 2.0, объявлен устаревшим в пользу intel-compute-runtime.
Разработка
Для разработки на 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 и устройств, доступных в системе, установите clinfo.
Привязки для языков программирования
- JavaScript/HTML5: WebCL
- Python: python-pyopencl
- D: cl4d или DCompute
- Java: Aparapi или JOCL (часть JogAmp)
- Mono/.NET: Open Toolkit
- Go: Связка OpenCL для Go
- Racket: Racket имеет собственный интерфейс на PLaneT который можно установить с помощью raco.
- Rust: ocl
- Julia: OpenCL.jl
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 требуется рабочее окружение C++11. Существует несколько библиотек с открытым исходным кодом:
- ComputeCpp SDK: Коллекция примеров кода, интеграция cmake для ComputeCpp
- SYCL-DNN: Примитивы производительности нейронной сети
- SYCL-BLAS: Примитивы производительности линейной алгебры
- VisionCpp: Библиотека компьютерного зрения
- SYCL Parallel STL: GPU-реализация параллельных алгоритмов C++17
CUDA
CUDA (Compute Unified Device Architecture) — это проприетарная архитектура параллельных вычислений с закрытым исходным кодом и фреймворк от NVIDIA. CUDA требует наличия графического процессора 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.
Разработка
Пакет cuda устанавливает все компоненты в каталог /opt/cuda
. Для компиляции кода CUDA добавьте /opt/cuda/include
в пути для включения в настройках компилятора. Например, это можно сделать, добавив -I/opt/cuda/include
во флаги/опции компилятора. Чтобы использовать nvcc
— обёртку над gcc
, которую предоставляет NVIDIA, — добавьте /opt/cuda/bin
в ваш PATH
.
Чтобы проверить, была ли установка успешной и работает ли CUDA, можно скомпилировать примеры CUDA. Одним из способов проверки установки является запуск примера deviceQuery
.
Привязки для языков программирования
- Fortran: PGI CUDA Fortran Compiler
- Haskell: пакет accelerate показывает доступные бэкенды CUDA
- Java: JCuda
- Mathematica: CUDAlink
- Mono/.NET: CUDAfy.NET, managedCuda
- Perl: KappaCUDA, CUDA-Minimal
- Python: python-pycuda
- Ruby: rbcuda
- Rust: cuda-sys (привязки) или RustaCUDA (высокоуровневая обёртка)
ROCm
ROCm[устаревшая ссылка 2024-10-12 ⓘ] (Radeon Open Compute) — это архитектура и структура параллельных вычислений с открытым исходным кодом от AMD. Хотя она требует наличия графического процессора AMD, некоторые инструменты ROCm не привязаны к конкретному оборудованию. Смотрите Репозиторий ROCm для Arch Linux для получения дополнительной информации и инструкций по установке.
HIP
Heterogeneous Interface for Portability (HIP)[устаревшая ссылка 2023-05-20 ⓘ] — это специализированная среда программирования GPU от AMD для разработки высокопроизводительных ядер на GPU. HIP — это API среды выполнения и язык программирования C++, который позволяет разработчикам создавать переносимые приложения на различных платформах.
- rocm-hip-runtime: Базовая среда выполнения, пакеты для запуска приложений HIP на платформе AMD.
- hip-runtime-amd: Гетерогенный интерфейс для AMDGPU в ROCm. Поддерживает GPU от архитектуры Polaris (серия RX 500) до новейшей архитектуры AMD RDNA 2 (серия RX 6000).
- hip-runtime-nvidiaAUR: Гетерогенный интерфейс для графических процессоров NVIDIA в ROCm.
- Информация об использовании HIP в Blender доступна в разделе Blender#HIP on AMD open source drivers.
- Если со сборкой rocm-llvm (нужен для hip-runtime-amd) есть проблемы, можно взять скомпилированные пакеты из неофициального репозитория, который предлагается использовать на странице проекта. Скомпилированные файлы ROCm Debian, которые предоставляет AMD, также доступны в opencl-amd-devAUR.
OpenMP
Пакет openmp-extrasAUR предоставляет AOMP — компилятор на базе Clang/LLVM с открытым исходным кодом и добавленной поддержкой API OpenMP на графических процессорах AMD.
OpenCL
Пакет rocm-opencl-runtime — это часть фреймворка ROCm, предоставляющий среду выполнения OpenCL.
Поддержка изображений OpenCL
Последние версии ROCm теперь включают поддержку изображений OpenCL, используемых программами с ускорением GPGPU, такими как Darktable. ROCm с графическим драйвером AMDGPU с открытым исходным кодом — это всё, что требуется. AMDGPU PRO не требуется.
$ /opt/rocm/bin/clinfo | grep -i "image support"
Image support Yes
Список программ, использующих GPGPU
- Bitcoin
- Blender – Поддержка CUDA для графических процессоров Nvidia и поддержка HIP для графических процессоров AMD. Дополнительная информация здесь.
- BOINC
- FFmpeg – дополнительная информация здесь.
- Folding@home
- GIMP – экспериментальная поддержка, подробнее здесь.
- HandBrake
- Hashcat
- LibreOffice Calc – подробнее здесь.
- clinfo – Ищет все возможные (известные) свойства платформы OpenCL и устройства, доступные в системе.
- cuda_memtestAUR – тестирование памяти видеокарты. Несмотря на своё название, он поддерживает как CUDA, так и OpenCL.
- darktable – Для работы функции OpenCL требуется не менее 1 ГБ ОЗУ на GPU и #Поддержка изображений OpenCL.
- 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)