Вообще, мне интересно как делать код под GPU.
Варианты есть разные:
1.Cuda
2.OpenCL
3.Direct Compute
4.язык шейдеров в Open GL 4
и кажется еще существуют какие-то вещи.
Cuda хороша всем кроме одного обстоятельства - она работает только на видеокартах от nVidia
OpenCL работает на всём но пока показывает хуже быстродействие, иногда сильно хуже - ждем пока разработчики его доведут до ума.
Direct Compute очень хорош и интересен, быстродействие местами выше чем у всех предыдущих (если верить тестам которые есть в сети), но одна проблема - я не нашел толковых описаний на русском языке. А на английском мне пока изучать сложно.
Open GL 4 - это тот вариант который использую я. Он позволяет дать быстродействие максимальное или близкое к максимальному (Cuda в качестве эталона), по нём есть много описания и обучения на русском языке в открытом доступе. Единственно - он рассчитан не на вычисления общего характера а на графику, поэтому вычисления нужно делать посредством графических механизмов. Например вместо массивов использовать текстуры, вместо параллельных процессов пиксельные шейдеры:) Т.е. все понятия из графики. Но если приспособиться то это в принципе ни на что не влияет и для вычислений общего характера использовать можно.
И да - нужно упомянуть важную особенность всех этих систем и она связана с характером архитектуры видеокарт - на GPU невозможно делать любые алгоритмы как на CPU. Например там проблематично реализовывать алгоритмы с большим количеством ветвлений. Вернее реализовать то можно но быстродействие можно получить даже хуже чем на CPU (хотя в новых видеокартах ситуация в этой области становится всё лучше). А вот если правильно оптимизировать программы под архитектуру GPU то можно получить быстродействие до сотни раз а то и больше чем на CPU. Но именно отдельные блоки массивных вычислений нужно делать на GPU, полностью всю программу на GPU делать не целесообразно, т.е. нужно грамотно оптимизировать программу и распределить - что будет считаться на GPU а что на CPU, максимальная эффективность достигается именно в связке GPU и CPU.
Я с использованием GPU сделал движок музыкального синтезатора. Это позволило мне на бюджетном ноутбуке за 240 $ получить синтезатор с полифонией в 65536 тональных сигналов, каждый из которых управляется отдельно и из этой всей полифонии можно получать очень интересные звучания и эффекты - полифонический аддитивный синтез в реальном времени. например можно получать 256 голосов по 256 гармоник на голос. Или на практике более подходящий вариант - 32 голоса по 2048 гармоник (напоминаю - это на бюджетном нетбуке

). С таким количеством гармоник можно получить практически любые звучания, притом управляемые в реальном времени.
Так же начал делать в декабре прошлого года графический движок на основе рэй-трэйсинга и разреженного октодерева - совершено другой принцип рендера чем был принят раньше - в нем отсутствует понятие полигонов и можно рендерить неограниченную детализацию в реальном времени. Но пока этот проект не завершен и ждет пока я его продолжу. Т.е. я пока сделал на CPU, начал перевод на GPU но еще не доделал это поскольку есть более приоритетные задачи на сейчас. Версию для CPU можно посмотреть здесь:
https://yadi.sk/d/8QU0B3QadR7gv