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