101> Основные причины неудачи GPU в вычислительной гидродинамике (CFD):
101> 1. Много ядер, мало памяти на каждое из них. А CFD задачи славятся большими объемами.
Ну и что? GPU заточены под потоковую обработку, правильный стиль программирования под них — держим в локальной памяти только обрабатываемый срез потока данных, а ещё лучше — вообще только в регистрах, а локальную используем только для синхронизации, если нужно.
101> 2. GPU сидит на тормозном канале PCIe
Четыре гигабайта в секунду — это мало?
101> и на пересылках из ОЗУ в GPU и обратно теряется все возможное ускорение в вычислителе.
А нафига пересылать? Загрузили начальные значения, и считаем. На выходе — суммарные силы, это немного в объёме.
101> 3. В GPU организация вычислений гетерогенная, т.е. за один такт все ядра выполняют одну и ту же операцию. Т.е. часть делает то, что нам нужно, а остальное простаивает. Как сейчас не в курсе.
Не все, а только те, что в одном блоке. Но да, branch divergence — это проблема.
101> 4. Язык CUDA - нужно переписывать имеющийся х86 код под GPU.
А что, под AVX его не придётся переписывать? Типа, компилятор сам справится?

Нифига он не справится, всё равно придётся ручками писать, если хочется максимальной производительности.
101> Под AMD, соответственно, свои задрочки. В качестве альтернативы писать на OpenCL юнисекс код, но там не реализованы тонкие вещи, что есть в той же CUDA.
Хм, под CUDA я не писал особо, так как не люблю проприетарные решения и vendor lock-in вообще, но вроде как OpenCL как раз имеет более тонкий контроль над GPU. Или в CUDA уже запилили полностью асинхронную обработку задач? Давно не смотрел, что там.
101> 5. Самое говеное - стабильность работы вашего приложения зависит от текущего состояния драйверов и версии драйверов. Кто когда-либо писал что-либо под минидрайвер OpenGL в курсе. Мы в свое время нашли баг, которого не было в предыдущих версиях.
О, это да. Я один раз разбирался с совершенно замечательным багом с частичной записью в MRT, который оказался фичей. Суть в том, что в стандарте это запрещено, но с какого-то момента железо у AMD стало уметь это делать. А раньше драйвера и у красных и зелёных исправляли втихую кривой код, добивая нулями, а потом AMD выпустила драйвера без этой затычки ...
С учётом того, что код достался мне от предшественника, а записи в MRT были разбросаны по всему коду, было "весело".
101> В сухом остатке - метод конечных элементов ускорение на GPU в два раза.
Мало. Очень мало. Вы что-то делаете не так.
101> В итоге сидим и изучаем Xeon Phi и ждем его развития - x86 код, переписывать ничего не нужно,
"Переписывать не нужно"? Вы на голом C пишете? Хмм...