Нет, с ATI работать не будет, технология CUDA только! для графических плат Nvidia. Если говорить про ATI я бы смотрел в сторону OpenCL, но как оно будет работать с mpi я без понятия.
ATI Stream всё-таки достаточно устарел, сейчас развивается OpenCL, и лучше использовать именно его. Причём это будет работать практически везде: CPU, GPU разных производителей в отличие от CUDA и ATI Stream.
Отчасти, гибридный MPI+CUDA код активно используется на современных кластерах, включающих в свой состав GPU.
Кроме того, CUDA вполне адекватно взаимодействует и с OpenMP. А можно и с тем, и с другим. «Даёшь кентавров в программировании». Главное, не перестараться сильно с синхронизацией, а то потери на обмен данными превзойдут все ожидания.
Изначально планировалось запустить проект на tesla c2070 и какой-то кластер там был, но в конце-концов что-то там не срослось и доступа к нему нет, поэтому жду машину поинтересней. Ну а так вообще — да, в той же c2070 используются видюхи уровня gtx480.
Хм… прочитав про MPI+CUDA подумал что далее будет про как минимум два компа, а тут опять всё локально…
Как теория вполне сойдёт, а для практики маловато.
Кстати, несмотря на то, что OpenCL запускается и там, и там, ядра часто пишутся отдельные для CPU и GPU (если вообще используется CPU). Это связано с различными оптимизациями для этих устройств, код написанный для GPU будет значительно медленнее работать на CPU (по сравнению с оптимизированным для CPU). Ну а раз всё равно писать отдельный код, то можно воспользоваться и (субъективно) более удобными инструментами, чем OpenCL.
Я к тому, что используются одни и те же средства, а не 2 разные по идеологии и методам библиотеки. Оптимизации — это отдельная проблема, ведь часто приходится учитывать особенности каждой модели GPU и соответственно корректировать код.
Удобство — это когда как. Вот для научных вычислений лучше бывает архитектура shared memory. Например, для расчётов методом «частицы-в-ячейках» для каждого потока требуются параметры всех частиц, поэтому message-passing не очень катит.
Ну считается, что на cude проще писать, это конечно не настолько обычный «с», как ее везде пиарят, но по сравнению с OpenCL небо и земля. Конечно это лично мое мнение, т.к. я с OpenCL мало знаком, знаю что это такое и видел код, как-то даже хотел попробовать писать на нем, а потом вот на cuda натолкнулся и в принципе доволен, наверное одним из главных минусов можно считать — наличие данной технологии только на gpu nvidia. Пожалуй в следующей статье расскажу про cuda, в принципе для ее понимания достаточно неплохо разбираться в с/c++.
Мне лично кажется, что отсутствие кроссплатформенности — это ощутимый недостаток. Я пишу как раз на OpenCL из-за этого, а также потому, что OpenCL действительно весьма и весьма близок к С. Вплоть до того, что необходимо изучить только пару специфичных функций типа получения номера потока и иметь под рукой спецификацию.
Собственно OpenCL для этого и был создан Khronos Group (разрабатывающая OpenGL, и куда входят и Nvidia, и AMD, и Intel и прочие): чтобы унифицировать программный интерфейс использования видеокарт для параллельных вычислений.
OpenCL сложнее чем CUDA, требует больше кода, но если нужна кроссплатформенность — то лучше использовать именно его.
Недавно начал осваивать эту технологию, так она связана с темой моей будущей диссертации. Вообще русскоязычной документации, по CUDA, CUDA+MPI, CUDA+MPI+OpenMP, как оказалось, валом. Кому интересно: https://sites.google.com/site/cudacsmsusu/file-cabinet http://tesla.parallel.ru/wordpress/?p=153 — здесь можно попросить логин на тестовый кластер с двумя сокетами и 8-ю теслами, без системы очередей.
Два гиганта в одной программе — Nvidia CUDA и MPI