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.
— Байндинги с С++ вообще кривоватые, пользуйся сишными функциями напрямую. Заодно и проблем с версиями можно будет избежать.
— ... занимаешься бредом, сиди и слушай свои "валенки" — очень не хотелось бы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.