LINUX.ORG.RU

nVidia - оживить OpenCL и OpenMAX


0

2

Есть Ubuntu Linux 64-bit и nVidia GeForce GT 610. Драйвер (немаловажно) богомерзкий блоб 310.44.

Вопрос: хочу OpenCL. Я тыкался и не смог найти что именно нужно качать, какие SDK для разработки. И, что интересно, есть ли в простой поставке драйвера библиотеки чтобы на клиентской машине просто запустить OpenCL-accelerated программу?

Второе, есть такой стандарт OpenMAX и у меня платка Raspberry Pi его держит. И мне любопытно, есть ли в блобах для десктопных видеокарт поддержка этого самого OpenMAX. Нужно будет написать программу с OpenMAX, но хотел бы тестировать её и на десктопе с nVidia. Хотя, этот вопрос второстепенен.

Как-то так... http://orbigo.net/2012/07/installing-nvidia-opencl-cuda-sdk-in-ubuntu-12-04-lts/

Они объединили OpenCL и кудкуду в один пакет. Еще пишут что в их блобных драйверах есть рантаймная поддержка OpenCL. (октазались от x86 для OpenCL - бред, как софт писать?).

Про OpenMAX всё еще интересно.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Да, если ставишь их закрытые драйвера, то там есть либа для OpenCL и все прекрасно работает. Ну а хэдеры и руками скачать можно, и пакет соответсвующий в убунте тоже есть.

nerh
()
Ответ на: комментарий от ZenitharChampion

Я установил и у меня тоже это появилось. Но... при установке оно просило обновить драйвер. У меня стоял дистрибутивный и я в этом месте указал no. В результате - не все примеры компилируются. А те простые несколько скомпилировались - не запускаются с ошибкой:

CUDA Clock sample
CUDA error at ../../common/inc/helper_cuda.h:898 code=35(cudaErrorInsufficientDriver) "cudaGetDeviceCount(&device_count)"

В общем, нету куды! Но самое интересно, мне нужно именно OpenCL - где же оно? Нет примеров в NVIDIA_CUDA-5.5_Samples для OpenCL.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Как устанавливал я. Скачал пакет RPM для Opensuse, он занимал 2 килобайта. Он просто прописал репозиторий. Открыл репозиторий - а там и драйвер, и CUDA. Может и для твоего дистрибутива Linux подключился репозиторий с драйвером?

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Я качал run файл... Ранее пробовал deb файл с репозиторием, но устанавливаться пакет категорически отказался, у меня 13.04, а там deb для Ubuntu 12.10. Вернее этот deb установился, а софтина которую советовал поставить мануал - не поставилась из за конфликта версий.

Но ведь и в более ранних версиях дров (а в 13.04 не такая же старая версия) - есть OpenCL.

Я пока не понял - как мне скомпилировать простейшую OpenCL программу и где взять пример для OpenCL от самой nVidia?

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Спасибо!

pwd
/usr/local/cuda-5.5/include/CL
ls
cl_ext.h  cl_gl_ext.h  cl_gl.h  cl.h  cl_platform.h  opencl.h

Всё есть.

А скомпилированная с этими либами программа - на AMD ноуте запустится? При условии что там стоит fglrx и есть поддержка OpenCL. Ничего что нвидивские либы?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Не могу ответить. Я как-то просил знакомого скомпилировать cgminer и сказать скорость на его видеокарте. Он скачал последний AMD APP SDK и последний Catalyst. Catalyst уже установил libOpenCL.so.1, осталось только сделать симлинк libOpenCL.so. То есть зря скачивали SDK. Но header-ов не было - скопировали из SDK в /usr/include. В результате программа выдала ошибку, я её не вспомню дословно. «Программа скомпилирована с OpenCL версии такой-то, а в системе такая-то».

Второе наблюдение. Debian, NVIDIA. Компилирую cgminer (а больше ничего с OpenCL я и не компилировал), получается один размер. Вытаскиваю NVIDIA, вставляю ATi, меняю драйвер, компилирую cgminer. Размер другой. Но атишный бинарник с NVIDIA запустить не попробовал, и наоборот тоже.

Может header-ы отличаются. Может нет, а разный размер cgminer из-за самого libOpenCL.so.1.

Я заметил что header-ы OpenGL из Mesa, NVIDIA и ATi тоже отличаются, если сделать diff (использую графический). И была разница в работе Wine от того с Mesa его компилировать или с проприетарным драйвером - но это слишком долго рассказывать. На сайте OpenGL есть как бы эталонные headers, их наверное и использует Mesa. Посмотри где берёт Gentoo header-ы OpenCL, ибилд берёт его отдельно от драйвера.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Прочитал тут: http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/first-opencl-pro...

и добавил еще и этот код https://devtalk.nvidia.com/default/topic/498968/printing-all-opencl-devices-n...

Сделал sudo apt-get install opencl-headers и появились некие обобщенные заголовки. Есть у меня и libOpenCL.so -> /etc/alternatives/x86_64-linux-gnu_libOpenCL.so

Драйвер проприетарный...

Что у меня на выходе:

Number of platforms:    1

Platform:               0

        Platform Vendor:        NVIDIA Corporation
        Number of devices:      1

        Device: 0
                Name:                           GeForce GT 610
                Vendor:                         NVIDIA Corporation
                Available:                      Yes
                Compute Units:                  1
                Clock Frequency:                1620 mHz
                Global Memory:                  1023 mb
                Max Allocateable Memory:        256 mb
                Local Memory:                   49152 kb

Hello, World!

Почему у меня в строке Compute Units: 1 - почему единица? Иду в nvidia-settings и вижу cuda cores 48.

Зачем такая путаница и как жить если вместо 48 видится только одно считательное ядро?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Compute Unit'ы состоят из нескольких ядер у 610ой 1CU соответствует 48CUDA ядрам.

У АМД, например, 1CU -> 4 SIMT движка по 16 stream core и 1 scalar unit каждый. Eсли я правильно понимаю на примере амд, то каждый CU способен выполнять по 64 операции за раз (пачки по 16 - одинаковые), но может и скатиться до 4-х операций, для которых понадобятся скалярные юниты, например разрешения ветвлений.

Что-то подобное и у Нвидии, разбиение другое, но 48 нитей 1CU должно клепать.

Aazmp
()
Ответ на: комментарий от Aazmp

А как же распределять число задач если там всё так слиплось? Чтобы 16 работали над одной задачей, 18 на другой, и еще 3 над третьей задачей?

Факт того что видно только один CU не влияет на ускорение?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Нет, драйвер не обновлял. Более того, я вообще забыл принести из дома этот огромный архив для cuda. Вывод программы что я сейчас привел - это не домашний комп, а на работе, где никаких пакетов кроме проприетарного блоба нет.

Так что к моему удивлению, просто драйвер как есть проприетарный от nVidia вот такой простой программой обнаружился. Просто «sudo apt-get install opencl-headers». Нвидевские репозитории не подключены.

Если у меня через OpenCL запросы обнаруживает устройство nVidia, значит я могу теперь уже писать OpenCL программы, задействуя весь потенциал?

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Чтобы 16 работали над одной задачей, 18 на другой, и еще 3 над третьей задачей?

Размечтался. Не та архитектура.

AlexVR ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Такой гибкости нет. Хотя одновременно исполнять разные кернелы можно(немного правда, на 7850 зарегестрировал одновременное исполнение не более двух), понадобятся разные CU.

Aazmp
()
Ответ на: комментарий от Aazmp

Дома:

                Name:                           GeForce GTX 465
                Vendor:                         NVIDIA Corporation
                Available:                      Yes
                Compute Units:                  11
Всего CUDA Cores 352, получается что 11 * 32 = 352.

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.