OpenCL и С++ - кривые байндинги или кривые руки?
От: Razzak  
Дата: 25.03.13 10:50
Оценка:
Решил тут как-то на досуге разобраться наконец-то с программированием под GPU.
На CUDA решил не заморачиваться, карточки от ATI ведь тоже хочется попробовать.
Нашел OpenCL — казалось бы, вот оно счастье! И переносимо, и вообще.

Скачал ATI OpenCL SDK, поставил. Открыл OpenCL AMD Tutorial, скопипастил код, собрал. Не запускается — нету, говорит, какой-то функции в OpenCL.dll.
Подсунул ему под бок эту длл-ку из SDK, запустилось, дошло до определенного момента и упало с ошибкой доступа к памяти.
Успевает выдать, что в системе имеется 1 платформа (NVIDIA — и это правильно), платформа поддерживает OpenCL 1.1 (а SDK, что характерно, под версию 1.2 — потому и не находило каких-то функций в системной длл-ке).

Падает на вот этой строчке:

cl::vector<cl::Device> devices;
devices = context.getInfo<CL_CONTEXT_DEVICES>(); // пиндык


По идее, если девайсов системе нет, то должен вернуться пустой список.
Эксепшены выключены.
Байндинги — плюсовые, напрямую С-шные функции OpenCL не вызываются. Байндинги принудительно используют версию OpenCL 1.2 (как это отключить без правки хедеров — не нашел).

В чем может быть дело?

Пока вижу такие варианты:
— OpenCL SDK от ATI не совместим с драйверами NVidia.
— Байндинги версии 1.2 не совместимы с дровами, поддерживающими только версию 1.1.
— Байндинги с С++ вообще кривоватые, пользуйся сишными функциями напрямую. Заодно и проблем с версиями можно будет избежать.
— ... занимаешься бредом, сиди и слушай свои "валенки" — очень не хотелось бы.
Re: OpenCL и С++ - кривые байндинги или кривые руки?
От: Evgeny.Panasyuk Россия  
Дата: 25.03.13 13:01
Оценка: 1 (1)
Здравствуйте, Razzak, Вы писали:

R>- Байндинги с С++ вообще кривоватые, пользуйся сишными функциями напрямую. Заодно и проблем с версиями можно будет избежать.


В 2010 я использовал OpenCL без binding'ов, напрямую (естественно были свои thin обвёртки). Тогда от API не так много требовалось — найти устройства, скомпилировать ядро, передать буферы на device, запустить и скопировать результаты. Всё работало и на NVIDIA и на ATI, и даже на CPU.
В рассылке Boost'а недавно пролетала либа со своим фасадом — можно попробовать её.
PS, ещё есть C++ AMP, но где он сейчас работает кроме MS — я не в курсе.
Re: OpenCL и С++ - кривые байндинги или кривые руки?
От: __kot2  
Дата: 25.03.13 22:11
Оценка:
OpenCL на самом деле нифига никуда не переносим. пользуйтесь AMD шными карточками. или Кудой под NVidia
Re: OpenCL и С++ - кривые байндинги или кривые руки?
От: agat50  
Дата: 25.03.13 22:28
Оценка:
Здравствуйте, Razzak, Вы писали:

R>- OpenCL SDK от ATI не совместим с драйверами NVidia.


У меня от Ати карточка, но кажись эта версия самая логичная. ATI sdk для её же карт.
Re[2]: OpenCL и С++ - кривые байндинги или кривые руки?
От: agat50  
Дата: 25.03.13 22:40
Оценка:
Здравствуйте, agat50, Вы писали:

Гугл поведал что "OpenCL.dll для карты NVidia поставляется вместе с драйвером и впоследствии оказывается в \Windows\SysWOW64". Но есть немалый шанс что вы её уже потёрли версией от Ati.
Re: OpenCL и С++ - кривые байндинги или кривые руки?
От: Vzhyk  
Дата: 26.03.13 08:48
Оценка:
On 25.03.2013 13:50, Razzak wrote:

> — OpenCL SDK от ATI не совместим с драйверами NVidia.

Логично же.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Razzak  
Дата: 26.03.13 11:08
Оценка:
Здравствуйте, agat50, Вы писали:

A>Здравствуйте, agat50, Вы писали:


A>Гугл поведал что "OpenCL.dll для карты NVidia поставляется вместе с драйвером и впоследствии оказывается в \Windows\SysWOW64". Но есть немалый шанс что вы её уже потёрли версией от Ati.


Ну, насчет этого я не беспокоюсь: на основной машине я ничего лишнего не ставлю, вся разработка (в т. ч. инсталляция разных SDK) — только под VirtualBox в виртуальной машине.

Да, OpenCL.dll от NVidia в системе есть, но с ней программа не грузится — как я уже жаловался, С++-ные байндинги используют функции, которые добавились в OpenCL 1.2 и которых нет в этой dll. Переключиться на версию 1.1 без правки исходников, похоже, не получится.

Похоже, придется послать в оппу эти байндинги и написать свои обертки.
Re[2]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Razzak  
Дата: 26.03.13 11:51
Оценка:
Здравствуйте, Vzhyk, Вы писали:

>> — OpenCL SDK от ATI не совместим с драйверами NVidia.

V>Логично же.

Да хрен их знает, пишут-то о совместимости (вплоть до того, что в программе можно одновременно использовать девайсы разных производителей).

Там весь SDK — это пяток хедеров и одна ДЛЛ-ка на 50 килобайт.
Re[3]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Vzhyk  
Дата: 26.03.13 12:02
Оценка:
On 26.03.2013 14:51, Razzak wrote:

> Да хрен их знает, пишут-то о совместимости (вплоть до того, что в

> программе можно одновременно использовать девайсы разных производителей).
Вот только натанцуешься с бубном от всей души. По крайней мере народ в
массе своей танцует.

> Там весь SDK — это пяток хедеров и одна ДЛЛ-ка на 50 килобайт.

Ага. Но, таже AMD не в силах запустить эту dll под WinXPx64. Наверное в
самом деле там внутри что-то очень и очень сложное.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Vzhyk  
Дата: 26.03.13 12:03
Оценка:
On 26.03.2013 14:08, Razzak wrote:

> Ну, насчет этого я не беспокоюсь: на основной машине я ничего лишнего не

> ставлю, вся разработка (в т. ч. инсталляция разных SDK) — только под
> VirtualBox в виртуальной машине.
Подожди, а как ты OpenCL в виртуалке поднял?
Posted via RSDN NNTP Server 2.1 beta
Re[5]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Razzak  
Дата: 26.03.13 12:21
Оценка:
Здравствуйте, Vzhyk, Вы писали:

V>On 26.03.2013 14:08, Razzak wrote:


>> Ну, насчет этого я не беспокоюсь: на основной машине я ничего лишнего не

>> ставлю, вся разработка (в т. ч. инсталляция разных SDK) — только под
>> VirtualBox в виртуальной машине.
V>Подожди, а как ты OpenCL в виртуалке поднял?

А я и не поднимал.
Там оно всего лишь собирается, а запускается — уже на хостовой машине, где карточка живая есть.
Re[4]: OpenCL и С++ - кривые байндинги или кривые руки?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 26.03.13 12:35
Оценка:
Здравствуйте, Vzhyk, Вы писали:

>> Там весь SDK — это пяток хедеров и одна ДЛЛ-ка на 50 килобайт.

V>Ага. Но, таже AMD не в силах запустить эту dll под WinXPx64. Наверное в
V>самом деле там внутри что-то очень и очень сложное.

Display Driver изменилось чуть более чем полностью в Windows Vista. WDDM для Vista. XDDM для XP. Поэтому у всех производителей драйвера для этих операционок отличаются чуть более чем полностью. Посему вопрос не о том, чтобы запустить dll под XP, вопрос больше в том, чтобы реализовать ее полностью.
Re: OpenCL и С++ - кривые байндинги или кривые руки?
От: Razzak  
Дата: 29.03.13 12:23
Оценка:
Здравствуйте, Razzak, Вы писали:

В общем, всем спасибо. После написания своих врапперо-велосипедов все заработало: удалось запустить на GPU хелловорлд и получить от него ответ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.