Есть ли преимущество MPI + CUDA перед чистым MPI? - PullRequest
4 голосов
/ 09 ноября 2011

Обычный способ ускорить приложение - это распараллелить приложение, используя MPI или библиотеки более высокого уровня, такие как PETSc, которые используют MPI под капотом.

Однако в настоящее время все, похоже, заинтересованы в использовании CUDA для распараллеливанияприменение или использование гибридных MPI и CUDA для более амбициозных / более крупных проблем.

Есть ли заметное преимущество в использовании гибридной модели программирования MPI + CUDA по сравнению с традиционной, проверенной и испытанной моделью параллельного программирования MPI?Я спрашиваю это конкретно в областях применения методов частиц

Одна из причин, почему я задаю этот вопрос, заключается в том, что везде в сети я вижу утверждение, что «Методы частиц естественным образом отображают архитектуру графических процессоров» или некоторые другие.вариация этого.Но, похоже, они никогда не оправдывают, почему я бы лучше использовал CUDA, чем просто MPI для той же работы.

Ответы [ 2 ]

12 голосов
/ 09 ноября 2011

Это немного яблок и апельсинов.

MPI и CUDA - это принципиально разные архитектуры.Самое главное, MPI позволяет распределять ваше приложение по нескольким узлам, а CUDA позволяет вам использовать графический процессор в локальном узле.Если в программе MPI ваши параллельные процессы требуют слишком много времени для завершения, тогда да, вы должны посмотреть, как их можно ускорить, используя для выполнения своей работы графический процессор вместо центрального процессора.И наоборот, если ваше приложение CUDA все еще занимает слишком много времени для завершения, вы можете распределить работу по нескольким узлам, используя MPI.

Эти две технологии в значительной степени ортогональны (при условии, что все узлы в вашем кластере являются CUDA-дееспособный).

1 голос
/ 09 ноября 2011

Просто для того, чтобы опираться на уже хороший ответ другого автора, проведем высокоуровневую дискуссию о том, какие проблемы хороши для графических процессоров и почему.их отличного происхождения.По сравнению с ядрами CPU ядра GPU содержат больше ALU и оборудования FP, а также меньше логики управления и кеша.Это означает, что графические процессоры могут обеспечить более высокую эффективность для прямых вычислений, но только код с регулярным потоком управления и шаблонами доступа к интеллектуальной памяти будет видеть лучшее преимущество: вплоть до TFLOPS для кода SP FP.Графические процессоры предназначены для высокопроизводительных устройств с высокой задержкой на уровне управления и памяти.Глобально доступная память имеет длинную широкую шину, так что объединенные (смежные и выровненные) обращения к памяти достигают хорошей пропускной способности, несмотря на большую задержку.Задержки скрыты, требуя массивного параллелизма потоков и обеспечения аппаратного переключения контекста практически без издержек.Графические процессоры используют SIMD-подобную модель SIMT, в которой группы ядер выполняются в режиме блокировки SIMD (различные группы могут свободно расходиться), не заставляя программиста учитывать этот факт (кроме как для достижения наилучшей производительности: в Fermi это может сделатьразница до 32х).SIMT предоставляет модель параллельного программирования данных, в которой независимость данных используется для выполнения аналогичной обработки большого массива данных.Предпринимаются усилия для обобщения графических процессоров и их модели программирования, а также для упрощения программирования для обеспечения высокой производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...