Страницы

пятница, 6 января 2017 г.

OpenCL radeon r600g. Параллельные вычисления. Проверка возможностей APU A10-6700 в Linux Fedora 25

Процессор 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, сразу к делу. Спецификации на 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

※※※

Комментариев нет: