Pull to refresh

Comments 21

Это ведь не работает с ATI? А можете дать наводку?
Нет, с ATI работать не будет, технология CUDA только! для графических плат Nvidia. Если говорить про ATI я бы смотрел в сторону OpenCL, но как оно будет работать с mpi я без понятия.
У ATI есть аналог CUD'ы: ATI Stream.

Ну и OpenCL поддерживается и там и там.
ATI Stream всё-таки достаточно устарел, сейчас развивается OpenCL, и лучше использовать именно его. Причём это будет работать практически везде: CPU, GPU разных производителей в отличие от CUDA и ATI Stream.
Интересно. По идее, используя MPI можно и нормальный вычислительный кластер на видеокартах сделать?
Отчасти, гибридный MPI+CUDA код активно используется на современных кластерах, включающих в свой состав GPU.

Кроме того, CUDA вполне адекватно взаимодействует и с OpenMP. А можно и с тем, и с другим. «Даёшь кентавров в программировании». Главное, не перестараться сильно с синхронизацией, а то потери на обмен данными превзойдут все ожидания.
Изначально планировалось запустить проект на tesla c2070 и какой-то кластер там был, но в конце-концов что-то там не срослось и доступа к нему нет, поэтому жду машину поинтересней. Ну а так вообще — да, в той же c2070 используются видюхи уровня gtx480.
Извините, промахнулся комментарием:( читайте ниже.
Хм… прочитав про MPI+CUDA подумал что далее будет про как минимум два компа, а тут опять всё локально…
Как теория вполне сойдёт, а для практики маловато.
Да, было бы интересно почитать опыт запуска на нескольких компах с разными карточками — там уже немного хитрее.
Тут скорее интереснее был бы mpi код, т.к. в cuda можно установить device который будет использоваться.
> Упор я хочу сделать именно на саму структуру программы и настройку вышеописанных технологий для работы в одной программе.

Как-то слабо. Статья в двух словах: сначала следуйте мануалу по вашей реализации MPI, затем мануалу по CUDA.

Я ожидал рассказ про прямое копирование данных между памятью разных карт при помощи MPI и прочие классные штуки.
Возможно расскажу ближе к новому году, когда у нас запустят гибридный суперкомпьютер, самому интересно.
А чем этот метод принципиально лучше OpenCL? Там ведь код для CPU и GPU пишется и запускается единообразно.
Кстати, несмотря на то, что 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-ю теслами, без системы очередей.
Уточню: для доступа на тестовый кластер необходимо зарегистрироваться (наличие конкретной задачи для расчета на GPU+MPI — обязательно).
Sign up to leave a comment.

Articles