GPGPU (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
GPGPU
. Дата последней синхронизации: 6 декабря 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
NVIDIA (Русский)
Аппаратное ускорение видео
GPGPU
(General-purpose computing on graphics processing units) — неспециализированные вычисления на графических процессорах. Другими словами, это означает выполнение на видеокарте вычислений, не относящихся непосредственно к графике.
OpenCL
OpenCL
(Open Computing Language) — это открытая, не требующая лицензионных отчислений спецификация параллельного программирования, разработанная некоммерческим консорциумом Khronos Group.
Спецификация OpenCL описывает язык программирования, общую среду, которая должна присутствовать, и C API, позволяющий программистам обращаться к этой среде.
Совет
С помощью утилиты
clinfo
можно посмотреть список платформ OpenCL, присутствующих устройств и свойств загрузчика ICD.
Среда выполнения
Для
выполнения
программ, использующих OpenCL, необходимо установить совместимую аппаратную среду выполнения.
AMD/ATI
opencl-mesa
: свободная среда выполнения для
AMDGPU
и
ATI
opencl-amd
AUR
,
opencl-amd-dev
AUR
: ROCr OpenCL и legacy OpenCL (он же orca), перепакованные из релизов AMD для ubuntu (эквивалентно
указанию
opencl=rocr,legacy
в ubuntu amdgpu-install)
opencl-legacy-amdgpu-pro
AUR
: 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-sdk
AUR
: AMD CPU среда выполнения
NVIDIA
opencl-nvidia
: официальная среда выполнения
NVIDIA
Intel
intel-compute-runtime
: также известная как среда выполнения Neo OpenCL, реализация с открытым исходным кодом для графического процессора Intel HD Graphics на платформах Gen8 (Broadwell) и последующих.
beignet
AUR
: реализация с открытым исходным кодом для GPU Intel HD Graphics на Gen7 (Ivy Bridge) и последующих платформах, которая была отменена компанией Intel в пользу драйвера NEO OpenCL, остаётся рекомендуемым решением для устаревших аппаратных платформ (например, Ivy Bridge, Haswell).
intel-opencl
AUR
: проприетарная реализация для графического процессора Intel HD Graphics на Gen7 (Ivy Bridge) и последующих платформах, отменённая Intel в пользу драйвера NEO OpenCL, остаётся рекомендуемым решением для устаревших аппаратных платформ (например, Ivy Bridge, Haswell).
intel-opencl-runtime
AUR
: реализация для процессоров Intel Core и Xeon. Она также поддерживает процессоры других производителей.
Прочие
pocl
: Реализация OpenCL на базе LLVM (аппаратно независимая)
Компилятор и транслятор позволяют запускать приложения OpenCL в среде Vulkan.
clspv-git
AUR
: прототип компилятора подмножества OpenCL C для вычислительных шейдеров Vulkan.
clvk
: прототип реализации OpenCL 3.0 поверх Vulkan с использованием clspv в качестве компилятора.
xrt-bin
AUR
: Xilinx Run Time для FPGA
xrt
fpga-runtime-for-opencl
: FPGA Runtime
32-битная среда выполнения
Для
выполнения
32-битных программ, использующих OpenCL, необходимо установить совместимую аппаратную 32-битную среду выполнения.
Совет
Утилита
clinfo
может использоваться только для получения списка 64-битных платформ OpenCL, присутствующих устройств и свойств загрузчика ICD.
Для 32-битных платформ необходимо скомпилировать clinfo для 32-бит или использовать 32-битный
clinfo
[
устаревшая ссылка
2023-06-17 ⓘ]
из проекта archlinux32.
AMD/ATI
lib32-opencl-mesa
: свободная среда выполнения для
AMDGPU
и
Radeon
(32 бита)
lib32-opencl-legacy-amdgpu-pro
AUR
: 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-opencl
AUR
от Intel. Обеспечивает OpenCL 2.0, объявлен устаревшим в пользу
intel-compute-runtime
.
Примечание
Поставщик загрузчика ICD упоминается только для идентификации каждого загрузчика, в остальном он совершенно не важен. Загрузчики ICD не зависят от производителя и могут использоваться как взаимозаменяемые (при условии, что они реализованы правильно).
Разработка
Для
разработки
на OpenCL минимально необходимыми дополнительными пакетами являются:
ocl-icd
: Реализация загрузчика OpenCL ICD, соответствующая последней спецификации OpenCL.
opencl-headers
: Заголовки API OpenCL C/C++.
SDK производителей предоставляют множество инструментов и вспомогательных библиотек:
intel-opencl-sdk
AUR
:
Intel OpenCL SDK
(старая версия, новые OpenCL SDK включены в INDE и Intel Media Server Studio)
amdapp-sdk
AUR
: Этот пакет устанавливается как
/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 не найдена.
Реализации
computecpp
AUR
: Проприетарная реализация SYCL 1.2.1 от Codeplay. В качестве целевых устройств могут использоваться SPIR, SPIR-V и экспериментально PTX (NVIDIA).
trisycl-git
AUR
: Реализация с открытым исходным кодом, в основном под руководством компании Xilinx.
hipsycl-cuda-git
AUR
[
ссылка недействительна
: package not found]
и
hipsycl-rocm-git
AUR
[
ссылка недействительна
: package not found]
: Бесплатная реализация, построенная на 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-runtime
AUR
,
pocl
и
amdgpu-pro-opencl
AUR
[
ссылка недействительна
: 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
[
ссылка недействительна
: package not found]
и
opencl-nvidia
. Библиотека "runtime" и остальной инструментарий CUDA доступны в
cuda
.
cuda-gdb
требует установки
ncurses5-compat-libs
AUR
, см.
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
[
устаревшая ссылка
2025-03-15 ⓘ]
(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-nvidia
: Гетерогенный интерфейс для графических процессоров NVIDIA в ROCm.
Совет
Информация об использовании HIP в Blender доступна в разделе
Blender#HIP on AMD open source drivers
.
Если со сборкой
rocm-llvm
(нужен для hip-runtime-amd) есть проблемы, можно взять скомпилированные пакеты из
неофициального репозитория
, который предлагается использовать на
странице проекта
. Скомпилированные файлы ROCm Debian, которые предоставляет AMD, также доступны в
opencl-amd-dev
AUR
.
OpenMP
Пакет
openmp-extras
AUR
предоставляет
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_memtest
AUR
– тестирование памяти видеокарты. Несмотря на своё название, он поддерживает как CUDA, так и OpenCL.
darktable
– Для работы функции OpenCL требуется не менее 1 ГБ ОЗУ на GPU и
#Поддержка изображений OpenCL
.
DaVinci Resolve
- нелинейный видеоредактор. Может использовать как OpenCL, так и CUDA.
imagemagick
lc0
AUR
- Используется для поиска нейронной сети (поддерживает tensorflow, OpenCL, CUDA и openblas).
opencv
pyrit
AUR
python-pytorch-cuda
- PyTorch с бэкендом CUDA
tensorflow-cuda
- Порт TensorFlow на CUDA
tensorflow-computecpp
AUR
- Порт TensorFlow на SYCL
xmrig
- Высокопроизводительный майнер CryptoNote на CPU и GPU (OpenCL, CUDA)
Смотрите также
Официальная страница OpenCL
Официальный сайт SYCL
Официальный сайт SPIR
Домашняя страница CUDA Toolkit
Домашняя страница Intel SDK для приложений OpenCL
Официальный сайт ComputeCpp
[
устаревшая ссылка
2025-11-17 ⓘ]
Список фреймворков OpenCL, применимых для различных графических процессоров