Процессор AMD APU A10-6700 - это гибридный процессор, содержит встроенное ядро AMD Radeon HD8670D.
Это даёт надежду, что возможности встроенного графического ядра можно будет использовать для ускорения некоторых операций и расчётов, помимо трехмерной графики и аппаратного ускорения кодирования и декодирования видеопотоков (что поломали в Fedora 25 под Wayland).
Для задействования возможностей вычисления на графическом ядре, надо установить инструменты: компилятор OpenCL C, различные реализации спецификации OpenCL, утилиты и пр.
Надо заметить, что в данной заметки, предпринята попытка разобраться с состоянием параллельных вычислений на графическом ядре, с использование открытых технологий.
В Linux, я сейчас использую Fedora 25, из-за окружения Gnome 3.
Устанавливать Ubuntu 16.04 LTS буду в крайнем случае, если ничего не выйдет. Драйвер AMD Catalyst он ведь под Ubuntu.
Не буду ваваться в историю OpenCL, сразу к делу. Спецификации на OpenCL различных версий можно найти в реестре "Khronos OpenCL™ Registry" [1].
Можно пойти простым путём - установить реализацию спецификации OpenCL на процессорах общего назначения [3]. Это позволит писать программы на OpenCL C, но ускорение будет слабым, за счёт команд SSE,AVX и пр.
Есть вариант, задействовать набор инструментов и драйверов от компании AMD, catalyst & amd app sdk [4]. Но это, невозможно в Fedora 25, для меня по крайней мере. Catalyst - уже старый драйвер. Как его устанавливать в новой системе неясно.
Я предпринял попытку установить OpenCL окружение в Windows 8.1. Там тоже надо устанавливать старый драйвер Catalyst, вместо Radeon Crimson.
Вообщем, поддержка весьма условная. Графика в процессоре уже старая, с точки зрения AMD. Много затруднений.
Есть вариант, на котором я остановился - попытаться задействоать открытые драйверы и библиотеки и получить многократное ускорение.
Спецификация OpenCL определяет способ, которым несколько устройств ускорителей могут сосуществовать в одной системе [2].
Каждый ускоритель "может реализовывать" библиотеку, соответствующую спецификации OpenCL.
Менеджер, который заведует согласованием называется : Installable Client Driver (ICD).
В репозитории Fedora 25 (64-bit) это пакет: ocl-icd.x86_64
Список установленных драйверов ускорителей можно посмотреть в :
/etc/OpenCL/vendors
в файле с расширением .icd указана ссылка на конкретную библиотеку, конретного ускорителя.
Для того, чтобы ориентироваться в достижении цели - установки OpenCL, прежде всего установлю полезные информационные утилиты clinfo - для отображения возможностей платформ и clpeak для легкого тестирования.
clinfo
В репозитории Fedora 25 (64-bit) это пакет: clinfo.x86_64
Если запустить clinfo на системе без поддержки OpenCL, отобразится следующее:
$ clinfo
Number of platforms 0
В системе с настроенной поддержкой OpenCL можно будет видеть
кратко:
$ clinfo -l
Platform #0: Clover
`-- Device #0: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Platform #1: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
Как видно доступно 2 платформы, внутри каждой по одному устройству ("Device" по терминологии OpenCL).
clpeak
В репозитории Fedora 25 (64-bit) это пакет: clpeak.x86_64
Позволяет посмотреть производительность некоторых операций OpenCL
$ sudo dnf install --enablerepo=updates-testing clpeak
Реализация спецификации OpenCL для выполнения на процессорах общего назначения, имеющих поддержку SSE/SSE2 AVX и т.п.
В репозитории Fedora 25 (64-bit) это пакет: pocl.x86_64
После установки этого пакета появляется 1 доступная opencl платформа №0, с одним opencl-устройством (процессор AMD A10-6700), с четырьмя вычислительными модулями.
$ clinfo -l
Platform #0: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
$ clpeak
Platform: Portable Computing Language
Device: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
Driver version : 0.13 (Linux x64)
Compute units : 4
Clock frequency : 3700 MHz
Global memory bandwidth (GBPS)
float : 2.73
float2 : 2.87
float4 : 3.11
float8 : 3.44
float16 : 3.35
Single-precision compute (GFLOPS)
float : 20.64
float2 : 3.21
float4 : 10.92
float8 : 20.60
float16 : 39.28
Transfer bandwidth (GBPS)
enqueueWriteBuffer : 2.88
enqueueReadBuffer : 1.71
enqueueMapBuffer(for read) : 173184.17
memcpy from mapped ptr : 1.52
enqueueUnmap(after write) : 244032.22
memcpy to mapped ptr : 1.39
Kernel launch latency : 0.94 us
OpenCL C - язык программирования "opencl-ядер". Написан в инфрастуктуре LLVM и зависит от неё. Это подмножество C. [5].
В репозитории Fedora 25 (64-bit) это пакет: libclc.x86_64
Что и удивительно, данная поддержка доступна для процессора AMD APU A10-6700, можно сказать "из коробки".
Кодовое имя семейства графики: "Nothern Islands", NI
Имя графического чипа: AMD ARUBA
Драйвер ядра: radeon
Драйвер Mesa: r600g
Пишется, что почти поддерживается спецификация OpenCL1.1 [11], см. колонку "Evergreen/NI" в [7].
В репозитории Fedora 25 (64-bit) это пакет: mesa-libOpenCL.x86_64
После установки mesa-libOpenCL.x86_64, появляется платформа Clover [8].
$ clinfo -l
Platform #0: Clover
`-- Device #0: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Platform #1: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
$ clpeak
Clpeak вываливает исключение на GPU. Вот это уже нерадостно. Это может привести к потерям времени на поиск и устранение трудностей.
Platform: Clover
Device: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Driver version : 13.0.2 (Linux x64)
Compute units : 6
Clock frequency : 0 MHz
Build Log: input.cl:48:2009: warning: null character ignored
unsupported call to function __floatunsidf in compute_dp_v1
Тут также есть проблема со старым багом: Clock frequency : 0 MHz. см.. https://people.freedesktop.org/~agd5f/0001-drm-radeon-add-query-to-fetch-the-max-engine-clock.patch
Ну отказала одна платформа (GPU), можно отлаживаться на другой (CPU). Тут и вступает в игру унифицированность OpenCL.
Python - это интерпретатор - он выполняет команды пользователя немедленно. Очень удобен для пошагового изучения неизвестной зверюшки OpenCL.
PyOpenCL - заворачивает различные части OpenCL в синтаксис привычный в языке Python. Зовётся и так: opencl pyhton bindings.
В репозитории Fedora 25 (64-bit) это пакеты: python2-pyopencl.x86_64 и python3-pyopencl.x86_64
В моей системе на команду python отозвалась версия 2.7.12, для неё и поставил.
Когда установлено почти всё, можно начать пробовать программировать на GPU.
Не факт, что в ближайшее время, но вот пара ссылок(en) [10] & [9]:
http://www.drdobbs.com/article/print?articleId=231002854&siteSectionName=parallel
http://www.drdobbs.com/article/print?articleId=240162614&siteSectionName=open-source
Главное достоинство OpenCL в том, что оно делает доступным обычному пользователю ускорение на графическом ядре, на его имеющемся оборудовании. Это сохраняет деньги и продлевает срок использования существующих машин.
Как и раньше, в эпоху 286, 386 процессоров, ускорение операций с плавающей точкой требовало отдельного сопроцессора, так и сейчас. :-)
1. Khronos OpenCL™ Registry. https://www.khronos.org/registry/cl/
2. Kronos ICD implementation: https://github.com/KhronosGroup/OpenCL-ICD-Loader
3. Portable Computing Language (PoCL). http://portablecl.org/
4. Страница загрузки AMD Catalyst. http://support.amd.com/en-us/download
5. OpenCL C implementation. http://libclc.llvm.org/
6. Clpeak. https://github.com/krrishnarraj/clpeak
7. http://dri.freedesktop.org/wiki/GalliumCompute/
8. Clover. https://people.freedesktop.org/~steckdenis/clover/
9. A Gentle Introduction to OpenCL. http://www.drdobbs.com/article/print?articleId=231002854&siteSectionName=parallel
10. Easy OpenCL with Python. http://www.drdobbs.com/article/print?articleId=240162614&siteSectionName=open-source
11. OpenCL 1.1 specification. https://www.khronos.org/registry/cl/specs/opencl-1.1.pdf
Это даёт надежду, что возможности встроенного графического ядра можно будет использовать для ускорения некоторых операций и расчётов, помимо трехмерной графики и аппаратного ускорения кодирования и декодирования видеопотоков (что поломали в Fedora 25 под Wayland).
Для задействования возможностей вычисления на графическом ядре, надо установить инструменты: компилятор OpenCL C, различные реализации спецификации OpenCL, утилиты и пр.
Надо заметить, что в данной заметки, предпринята попытка разобраться с состоянием параллельных вычислений на графическом ядре, с использование открытых технологий.
В Linux, я сейчас использую Fedora 25, из-за окружения Gnome 3.
Устанавливать Ubuntu 16.04 LTS буду в крайнем случае, если ничего не выйдет. Драйвер AMD Catalyst он ведь под Ubuntu.
Инфраструктура OpenCL
Не буду ваваться в историю OpenCL, сразу к делу. Спецификации на OpenCL различных версий можно найти в реестре "Khronos OpenCL™ Registry" [1].
Можно пойти простым путём - установить реализацию спецификации OpenCL на процессорах общего назначения [3]. Это позволит писать программы на OpenCL C, но ускорение будет слабым, за счёт команд SSE,AVX и пр.
Есть вариант, задействовать набор инструментов и драйверов от компании AMD, catalyst & amd app sdk [4]. Но это, невозможно в Fedora 25, для меня по крайней мере. Catalyst - уже старый драйвер. Как его устанавливать в новой системе неясно.
Я предпринял попытку установить OpenCL окружение в Windows 8.1. Там тоже надо устанавливать старый драйвер Catalyst, вместо Radeon Crimson.
Вообщем, поддержка весьма условная. Графика в процессоре уже старая, с точки зрения AMD. Много затруднений.
Есть вариант, на котором я остановился - попытаться задействоать открытые драйверы и библиотеки и получить многократное ускорение.
ICD - Installable Client Driver
Спецификация OpenCL определяет способ, которым несколько устройств ускорителей могут сосуществовать в одной системе [2].
Каждый ускоритель "может реализовывать" библиотеку, соответствующую спецификации OpenCL.
Менеджер, который заведует согласованием называется : Installable Client Driver (ICD).
В репозитории Fedora 25 (64-bit) это пакет: ocl-icd.x86_64
Список установленных драйверов ускорителей можно посмотреть в :
/etc/OpenCL/vendors
в файле с расширением .icd указана ссылка на конкретную библиотеку, конретного ускорителя.
Информационные утилиты clinfo & clpeak
Для того, чтобы ориентироваться в достижении цели - установки OpenCL, прежде всего установлю полезные информационные утилиты clinfo - для отображения возможностей платформ и clpeak для легкого тестирования.
clinfo
В репозитории Fedora 25 (64-bit) это пакет: clinfo.x86_64
Если запустить clinfo на системе без поддержки OpenCL, отобразится следующее:
$ clinfo
Number of platforms 0
В системе с настроенной поддержкой OpenCL можно будет видеть
кратко:
$ clinfo -l
Platform #0: Clover
`-- Device #0: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Platform #1: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
Как видно доступно 2 платформы, внутри каждой по одному устройству ("Device" по терминологии OpenCL).
clpeak
В репозитории Fedora 25 (64-bit) это пакет: clpeak.x86_64
Позволяет посмотреть производительность некоторых операций OpenCL
$ sudo dnf install --enablerepo=updates-testing clpeak
Portable Computing Language
Реализация спецификации OpenCL для выполнения на процессорах общего назначения, имеющих поддержку SSE/SSE2 AVX и т.п.
В репозитории Fedora 25 (64-bit) это пакет: pocl.x86_64
После установки этого пакета появляется 1 доступная opencl платформа №0, с одним opencl-устройством (процессор AMD A10-6700), с четырьмя вычислительными модулями.
$ clinfo -l
Platform #0: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
$ clpeak
Platform: Portable Computing Language
Device: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
Driver version : 0.13 (Linux x64)
Compute units : 4
Clock frequency : 3700 MHz
Global memory bandwidth (GBPS)
float : 2.73
float2 : 2.87
float4 : 3.11
float8 : 3.44
float16 : 3.35
Single-precision compute (GFLOPS)
float : 20.64
float2 : 3.21
float4 : 10.92
float8 : 20.60
float16 : 39.28
Transfer bandwidth (GBPS)
enqueueWriteBuffer : 2.88
enqueueReadBuffer : 1.71
enqueueMapBuffer(for read) : 173184.17
memcpy from mapped ptr : 1.52
enqueueUnmap(after write) : 244032.22
memcpy to mapped ptr : 1.39
Kernel launch latency : 0.94 us
OpenCL C
OpenCL C - язык программирования "opencl-ядер". Написан в инфрастуктуре LLVM и зависит от неё. Это подмножество C. [5].
В репозитории Fedora 25 (64-bit) это пакет: libclc.x86_64
OpenCL для встроенного в APU ядра Radeon HD8670D
Что и удивительно, данная поддержка доступна для процессора AMD APU A10-6700, можно сказать "из коробки".
Кодовое имя семейства графики: "Nothern Islands", NI
Имя графического чипа: AMD ARUBA
Драйвер ядра: radeon
Драйвер Mesa: r600g
Пишется, что почти поддерживается спецификация OpenCL1.1 [11], см. колонку "Evergreen/NI" в [7].
В репозитории Fedora 25 (64-bit) это пакет: mesa-libOpenCL.x86_64
После установки mesa-libOpenCL.x86_64, появляется платформа Clover [8].
$ clinfo -l
Platform #0: Clover
`-- Device #0: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Platform #1: Portable Computing Language
`-- Device #0: pthread-AMD A10-6700 APU with Radeon(tm) HD Graphics
$ clpeak
Clpeak вываливает исключение на GPU. Вот это уже нерадостно. Это может привести к потерям времени на поиск и устранение трудностей.
Platform: Clover
Device: AMD ARUBA (DRM 2.46.0 / 4.8.15-300.fc25.x86_64, LLVM 3.8.0)
Driver version : 13.0.2 (Linux x64)
Compute units : 6
Clock frequency : 0 MHz
Build Log: input.cl:48:2009: warning: null character ignored
unsupported call to function __floatunsidf in compute_dp_v1
Тут также есть проблема со старым багом: Clock frequency : 0 MHz. см.. https://people.freedesktop.org/~agd5f/0001-drm-radeon-add-query-to-fetch-the-max-engine-clock.patch
Ну отказала одна платформа (GPU), можно отлаживаться на другой (CPU). Тут и вступает в игру унифицированность OpenCL.
PyOpenCL обёртки для OpenCL на языке Python
Python - это интерпретатор - он выполняет команды пользователя немедленно. Очень удобен для пошагового изучения неизвестной зверюшки OpenCL.
PyOpenCL - заворачивает различные части OpenCL в синтаксис привычный в языке Python. Зовётся и так: opencl pyhton bindings.
В репозитории Fedora 25 (64-bit) это пакеты: python2-pyopencl.x86_64 и python3-pyopencl.x86_64
В моей системе на команду python отозвалась версия 2.7.12, для неё и поставил.
Когда установлено почти всё, можно начать пробовать программировать на GPU.
Не факт, что в ближайшее время, но вот пара ссылок(en) [10] & [9]:
http://www.drdobbs.com/article/print?articleId=231002854&siteSectionName=parallel
http://www.drdobbs.com/article/print?articleId=240162614&siteSectionName=open-source
Заключение
Главное достоинство OpenCL в том, что оно делает доступным обычному пользователю ускорение на графическом ядре, на его имеющемся оборудовании. Это сохраняет деньги и продлевает срок использования существующих машин.
Как и раньше, в эпоху 286, 386 процессоров, ускорение операций с плавающей точкой требовало отдельного сопроцессора, так и сейчас. :-)
※※※
Ресурсы
1. Khronos OpenCL™ Registry. https://www.khronos.org/registry/cl/
2. Kronos ICD implementation: https://github.com/KhronosGroup/OpenCL-ICD-Loader
3. Portable Computing Language (PoCL). http://portablecl.org/
4. Страница загрузки AMD Catalyst. http://support.amd.com/en-us/download
5. OpenCL C implementation. http://libclc.llvm.org/
6. Clpeak. https://github.com/krrishnarraj/clpeak
7. http://dri.freedesktop.org/wiki/GalliumCompute/
8. Clover. https://people.freedesktop.org/~steckdenis/clover/
9. A Gentle Introduction to OpenCL. http://www.drdobbs.com/article/print?articleId=231002854&siteSectionName=parallel
10. Easy OpenCL with Python. http://www.drdobbs.com/article/print?articleId=240162614&siteSectionName=open-source
11. OpenCL 1.1 specification. https://www.khronos.org/registry/cl/specs/opencl-1.1.pdf
※※※
※