Привет!
Заинтересовала тема написания гибридного ПО, использующего возможности CPU+GPU. Есть математическая задача, которую надо обсчитать, например, факторизация. Видюха от ATI. Погуглив, нашел статьи на хабре по OpenCL с примерами на С.
Вопросы:
1) можно ли писать под OpenCL на других языках, например python? Насколько это получится эффективным(скорость разработки + итоговое быстродействие)
2) Какие есть альтернативы OpenCL? Насколько они проще, сложнее? GLSL - альтернатива OpenCL?
Для начала нужно разделять код хоста и код ядра. Ядро в общем случае пишется ТОЛЬКО на C, а точнее на его диалекте для openCL. Для Nvidia можно писать на своеобразном ассемблере. Код хоста просто дергает функции opencl и может быть на чем угодно, привязка для python есть. Смысла в подобном не вижу, ибо opencl - сишный код.
По второму вопросу: есть CUDA. Есть FPGA с кастомным дизайном.
В любом случае разработка для параллельных вычислений должна начинаться с параллельного алгоритма. Некоторые задачи не параллелятся.
Собственно главное - это использование GPU - от CPU вы так и так никуда не денетесь. По CUDA материалов просто море. Включая конференции для разработчиков которые проводит Nvidia. По OpenCL инфы на порядок меньше.
Программирование GPU - достаточно близко к "железу" - потому и С/С++. Я хотел разобраться в OpenCL - но в результате плюнул и занялся Кудой.
Подумайте как вы собираетесь использовать свои знания. Вы можете стать редким/ценным спецом по OpenCL, а можно стать популярным спецом по CUDA - если заменить/докупить карту. В общем это вопрос философский.
1. mathema.tician.de/software/pyopencl
2. GLSL - это язык программирования шейдеров, если вам не визуализацию, а возвратить результаты, то не стоит. Альтернативы - CUDA (с ATI - сразу нет).
"с ATI - сразу нет" - т.е у АТИ(ну у AMD строго говоря) нет возможности разработки ПО на собственном диалекте языка С, как это есть в CUDA. Я правильно вас понял?