[РЕШЕНО] intel + nvidia + opencl

Автор elivin, 13 июля 2015, 20:28:06

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

elivin

Добрый день, форумчане.
Заинтересовался тут темой OpenCL. Но столкнулся с тем, что у меня просто не определяется оборудование. До этого думал, что у меня графикой занимается указанная на наклейке nVidia GEFORCE 720m (да, это ноутбук). Сначала попробовал скомпилировать базовый пример - собралось без проблем, но работать отказалось. Ещё не разобрался до конца, но там использовалось 2 понятия - платформа и оборудование. Изначально не определилась платформа - помогла установка пакета mesa-opencl-icd. Оборудование находится отказалось. Попробовал установить проприетарные драйвера от nVidia. Но с ними иксы не завелись. Ничего удивительного, если учесть, что
$ lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09)


Собственно, вопрос - возможно ли использовать nVidia-видеокарту для вычислений при помощи OpenCL? Или Intel'овский контроллер завести хотя бы.

P.S. Смотрю список платформ и оборудования данной программкой: http://pastebin.com/9Ac43zkS
Вывод на данный момент:
$ ./ocl_list         

Number of platforms:    1

Platform:               0

        Platform Vendor:        Mesa
        Number of devices:      0


P.P.S. В системе связанного с OpenCL установлено:
$ aptitude search ~iopencl
i   mesa-opencl-icd                                                                 - free implementation of the OpenCL API -- ICD runtime                                     
i A ocl-icd-libopencl1                                                              - Generic OpenCL ICD Loader                                                               
i   ocl-icd-opencl-dev                                                              - OpenCL development files                                                                 
i A opencl-headers                                                                  - OpenCL (Open Computing Language) header files


P.P.P.S. Debian Jessie amd64, asus x75v - http://e96.ru/computers/laptops/noutbuki/asus-x75vc-core-i3-3217u-1800mhz

P.P.P.S. Скидывайте, что ещё рассказать-показать

[ot]С установкой драйверов из репозитория возникла проблема - куча зависимостей от виртуальных пакетов, из-за которых рушилась установка. Пришлось качать с офсайта, патчить и устанавливать вручную[/ot]

ihammers

Для начала нужно разобраться в том почему система не видит видеокарту, так как вывод lspci показывает только intel.
Для работы с OpenCL на устройстве (видеокарте) всё-таки придётся настроить проприетарные драйвера. Если вы устанавливали просто драйвера, а не Bumblebee, то посмотрите настройку данной связки.

В принципе вы можете установить amd-clinfo (или clinfo у них вывод немного разный) для выдачи информации о ICDs.

PS: чаще всего использую загрузчик от amd (amd-opencl-icd).
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

elivin

#2
ihammers, благодарю. Вывод amd-clinfo в принципе совпал с тем, что я и ожидал. Только немного подробнее:
$ clinfo
Number of platforms:                             1
  Platform Profile:                              FULL_PROFILE
  Platform Version:                              OpenCL 1.1 MESA 10.3.2
  Platform Name:                                 Default
  Platform Vendor:                               Mesa
  Platform Extensions:                           cl_khr_icd


  Platform Name:                                 Default
ERROR: clGetDeviceIDs(-1)


Попробую установить Bumblebee, когда вернусь с работы.

P.S. А я всё-таки зря grep'ом отфильтровал устройства. nvidia распознаётся как "3D controller":
$ lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation 3rd Gen Core processor DRAM Controller [8086:0154] (rev 09)
00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0151] (rev 09)
00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09)
00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)
00:16.0 Communication controller [0780]: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 [8086:1e3a] (rev 04)
00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)
00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)
00:1c.0 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 [8086:1e10] (rev c4)
00:1c.1 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 [8086:1e12] (rev c4)
00:1c.3 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 4 [8086:1e16] (rev c4)
00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)
00:1f.0 ISA bridge [0601]: Intel Corporation HM76 Express Chipset LPC Controller [8086:1e59] (rev 04)
00:1f.2 SATA controller [0106]: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] [8086:1e03] (rev 04)
00:1f.3 SMBus [0c05]: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller [8086:1e22] (rev 04)
01:00.0 3D controller [0302]: NVIDIA Corporation GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] [10de:1140] (rev a1)
03:00.0 Network controller [0280]: Ralink corp. RT3290 Wireless 802.11n 1T/1R PCIe [1814:3290]
03:00.1 Bluetooth [0d11]: Ralink corp. RT3290 Bluetooth [1814:3298]
04:00.0 Ethernet controller [0200]: Qualcomm Atheros AR8161 Gigabit Ethernet [1969:1091] (rev 10)


[ot]А как всё-таки теперь устанавливаются проприетарные драйвера от nvidia из репозитория? sources.list:
deb http://mirror.yandex.ru/debian/ jessie main non-free
deb-src http://mirror.yandex.ru/debian/ jessie main non-free

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

deb http://mirror.yandex.ru/debian/ jessie-updates main
deb-src http://mirror.yandex.ru/debian/ jessie-updates main

deb http://mirror.yandex.ru/debian/ jessie-backports main
deb-src http://mirror.yandex.ru/debian/ jessie-backports main

Попытка установки:
$ sudo aptitude install nvidia-kernel-dkms
Следующие НОВЫЕ пакеты будут установлены:       
  libegl1-nvidia{a} libgl1-nvidia-glx{ab} libgl1-nvidia-glx:i386{ab} libgl1-nvidia-glx-i386:i386{a} libgles1-nvidia{a} libgles2-nvidia{a} libnvidia-eglcore{a}
  libnvidia-ml1{a} nvidia-alternative{ab} nvidia-driver{ab} nvidia-driver-bin{a} nvidia-kernel-dkms{b} nvidia-vdpau-driver{ab} xserver-xorg-video-nvidia{ab}
0 пакетов обновлено, 14 установлено новых, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 31,4 MB архивов. После распаковки 174 MB будет занято.
Следующие пакеты имеют неудовлетворённые зависимости:
nvidia-alternative : Зависит: glx-alternative-nvidia (>= 0.5) который является виртуальным пакетом.
                      Зависит: nvidia-modprobe который является виртуальным пакетом.
nvidia-driver : Зависит: nvidia-support который является виртуальным пакетом.
                 ПредЗависит: nvidia-installer-cleanup который является виртуальным пакетом.
xserver-xorg-video-nvidia : Зависит: nvidia-support (>= 20120630) который является виртуальным пакетом.
                             ПредЗависит: nvidia-installer-cleanup который является виртуальным пакетом.
libgl1-nvidia-glx : Зависит: nvidia-support который является виртуальным пакетом.
                     ПредЗависит: nvidia-installer-cleanup который является виртуальным пакетом.
libgl1-nvidia-glx:i386 : Зависит: nvidia-installer-cleanup:i386 (>= 20130816) который является виртуальным пакетом.
                          Зависит: nvidia-support:i386 который является виртуальным пакетом.
                          ПредЗависит: nvidia-installer-cleanup:i386 который является виртуальным пакетом.
nvidia-kernel-dkms : Зависит: nvidia-kernel-common (>= 20110213) который является виртуальным пакетом.
                      ПредЗависит: nvidia-installer-cleanup который является виртуальным пакетом.
nvidia-vdpau-driver : ПредЗависит: nvidia-installer-cleanup который является виртуальным пакетом.
Следующие действия разрешат зависимости:

      Сохранить для следующих пакетов их текущие версии:                                                   
1)      libegl1-nvidia [Не установлен]                                                                     
2)      libgl1-nvidia-glx [Не установлен]                                                                 
3)      libgl1-nvidia-glx:i386 [Не установлен]                                                             
4)      libgl1-nvidia-glx-i386:i386 [Не установлен]                                                       
5)      libgles1-nvidia [Не установлен]                                                                   
6)      libgles2-nvidia [Не установлен]                                                                   
7)      libnvidia-ml1 [Не установлен]                                                                     
8)      nvidia-alternative [Не установлен]                                                                 
9)      nvidia-driver [Не установлен]                                                                     
10)     nvidia-driver-bin [Не установлен]                                                                 
11)     nvidia-kernel-dkms [Не установлен]                                                                 
12)     nvidia-vdpau-driver [Не установлен]                                                               
13)     xserver-xorg-video-nvidia [Не установлен]                                                         

      Оставить следующие зависимости неразрешёнными:                                                       
14)     nvidia-driver-bin рекомендует nvidia-driver                                                       
15)     nvidia-kernel-dkms рекомендует nvidia-driver (>= 340.65) | libcuda1 (>= 340.65)                   
16)     nvidia-vdpau-driver рекомендует nvidia-kernel-dkms (= 340.65-2) | nvidia-kernel-340.65             
17)     xserver-xorg-video-nvidia рекомендует nvidia-driver (>= 340.65)                                   
18)     xserver-xorg-video-nvidia рекомендует nvidia-vdpau-driver (>= 340.65)                             
19)     xserver-xorg-video-nvidia рекомендует nvidia-kernel-dkms (= 340.65-2) | nvidia-kernel-340.65       
20)     libgl1-nvidia-glx:i386 рекомендует nvidia-kernel-dkms:i386 (= 340.65-2) | nvidia-kernel-340.65:i386
[/ot]

ihammers

А где раздел contrib в репозитариях? Потом смотрите в инструкцию к bumblebee. Насколько я помню, драйвера потянуться сами:
~$ sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get install bumblebee-nvidia primus primus-libs:i386

После установки потребуется (если не поправили) исправить:
Цитата: https://wiki.debian.org/ru/Bumblebee
Общие вопросы

- Если optirun возвращает следующую ошибку: [ERROR]Cannot access secondary GPU - error: Could not load GPU driver

Вам необходимо отредактировать файл конфигурации /etc/bumblebee/bumblebee.conf используя предпочитаемый текстовый редактор и изменить параметр "?KernelDriver=nvidia" на "?KernelDriver=nvidia-current", затем перезапустить, к примеру, демон bumblebee.

sudo service bumblebeed restart
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

elivin

#4
ihammers, и вновь благодарю.

Цитата: ihammers от 14 июля 2015, 14:35:59А где раздел contrib в репозитариях?
Вот у меня сейчас было лицо как у Вас аватар.

Цитата: ihammers от 14 июля 2015, 14:35:59sudo apt-get install bumblebee-nvidia primus primus-libs:i386
Сработало без проблем. А архитектура и так добавлена, как видно из приведённой мной выше попытки установки драйверов.

Цитата: ihammers от 14 июля 2015, 14:35:59если не поправили
Похоже поправили. Конфиг не правил, но рестартануть сервис пришлось - он запустился раньше иксов и не смог определить оборудование. Теперь оборудование определяется. Правда, пример, на котором я пробовал, не просто не работает, но даже пересобираться отказывается, но это уже другая история.

P.S. Для определения оборудования именно для OpenCL потребовалось ещё установить пакет nvidia-opencl-icd

P.P.S. немного беспокоит последняя строка вывода clinfo
Открыть содержимое (спойлер)
$ optirun clinfo
No protocol specified
No protocol specified
No protocol specified
No protocol specified
Number of platforms:                             2
  Platform Profile:                              FULL_PROFILE
  Platform Version:                              OpenCL 1.1 CUDA 6.5.33
  Platform Name:                                 NVIDIA CUDA
  Platform Vendor:                               NVIDIA Corporation
  Platform Extensions:                           cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts
  Platform Profile:                              FULL_PROFILE
  Platform Version:                              OpenCL 1.1 MESA 10.3.2
  Platform Name:                                 Default
  Platform Vendor:                               Mesa
  Platform Extensions:                           cl_khr_icd


  Platform Name:                                 NVIDIA CUDA
Number of devices:                               1
  Device Type:                                   CL_DEVICE_TYPE_GPU
  Vendor ID:                                     10deh
  Max compute units:                             2
  Max work items dimensions:                     3
    Max work items[0]:                           1024
    Max work items[1]:                           1024
    Max work items[2]:                           64
  Max work group size:                           1024
  Preferred vector width char:                   1
  Preferred vector width short:                  1
  Preferred vector width int:                    1
  Preferred vector width long:                   1
  Preferred vector width float:                  1
  Preferred vector width double:                 1
  Native vector width char:                      1
  Native vector width short:                     1
  Native vector width int:                       1
  Native vector width long:                      1
  Native vector width float:                     1
  Native vector width double:                    1
  Max clock frequency:                           1550Mhz
  Address bits:                                  32
  Max memory allocation:                         536805376
  Image support:                                 Yes
  Max number of images read arguments:           128
  Max number of images write arguments:          8
  Max image 2D width:                            32768
  Max image 2D height:                           32768
  Max image 3D width:                            2048
  Max image 3D height:                           2048
  Max image 3D depth:                            2048
  Max samplers within kernel:                    16
  Max size of kernel argument:                   4352
  Alignment (bits) of base address:              4096
  Minimum alignment (bytes) for any datatype:    128
  Single precision floating point capability
    Denorms:                                     Yes
    Quiet NaNs:                                  Yes
    Round to nearest even:                       Yes
    Round to zero:                               Yes
    Round to +ve and infinity:                   Yes
    IEEE754-2008 fused multiply-add:             Yes
  Cache type:                                    Read/Write
  Cache line size:                               128
  Cache size:                                    32768
  Global memory size:                            2147221504
  Constant buffer size:                          65536
  Max number of constant args:                   9
  Local memory type:                             Scratchpad
  Local memory size:                             49151
  Kernel Preferred work group size multiple:     32
  Error correction support:                      0
  Unified memory for Host and Device:            0
  Profiling timer resolution:                    1000
  Device endianess:                              Little
  Available:                                     Yes
  Compiler available:                            Yes
  Execution capabilities:                               
    Execute OpenCL kernels:                      Yes
    Execute native function:                     No
  Queue properties:                             
    Out-of-Order:                                Yes
    Profiling :                                  Yes
  Platform ID:                                   0x00000000017821a0
  Name:                                          GeForce GT 720M
  Vendor:                                        NVIDIA Corporation
  Device OpenCL C version:                       OpenCL C 1.1
  Driver version:                                340.65
  Profile:                                       FULL_PROFILE
  Version:                                       OpenCL 1.1 CUDA
  Extensions:                                    cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts  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_fp64


  Platform Name:                                 Default
ERROR: clGetDeviceIDs(-1)

[свернуть]
А "ручной определитель" говорит, что всё нормально:
Открыть содержимое (спойлер)
$ ./ocl_list

Number of platforms:    2

Platform:               0

        Platform Vendor:        NVIDIA Corporation
        Number of devices:      1

        Device: 0
                Name:                           GeForce GT 720M
                Vendor:                         NVIDIA Corporation
                Available:                      Yes
                Compute Units:                  2
                Clock Frequency:                1550 mHz
                Global Memory:                  2048 mb
                Max Allocateable Memory:        512 mb
                Local Memory:                   49151 kb

Platform:               1

        Platform Vendor:        Mesa
        Number of devices:      1

        Device: 0
                Name:                           GeForce GT 720M
                Vendor:                         NVIDIA Corporation
                Available:                      Yes
                Compute Units:                  2
                Clock Frequency:                1550 mHz
                Global Memory:                  2048 mb
                Max Allocateable Memory:        512 mb
                Local Memory:                   49151 kb
[свернуть]

ihammers

Различные программы --- различный вывод, возможно какая-то функция не так обрабатывается, поэтому и вывод такой. У вас в выводе clinfo нету CPU.
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

elivin

Цитата: ihammers от 15 июля 2015, 05:02:31У вас в выводе clinfo нету CPU
Тоже обратил внимание. Но решил сосредоточиться на видеокарте. Мне на самом деле не принципиально. Я только хотел посмотреть на практике, что такое OpenCL и с чем его едят (OpenCL как библиотека для Си)

Кстати, пример не работал, так как bumblebee стартанул с ошибкой. Потребовалось удалить модуль nvidia_uvm. Теперь работает.

О ошибка в clinfo - похоже, он выводит сначала доступные платформы и оборудование на них, а последние 2 строки - используемая по умолчанию платформа (у меня не выбрана) и оборудование для неё (которого нет, так как не указана платформа)