MPI и OpenMP. У меня даже есть выбор? - PullRequest
1 голос
/ 07 января 2012

У меня есть код линейной алгебры, который я пытаюсь запустить быстрее.Это итеративный алгоритм с умножением циклов и векторов в In. До сих пор я использовал MATMUL (Fortran Lib.), DGEMV, пытался написать собственный MV-код в OpenMP, но алгоритм не улучшился в плане масштабируемости.Ускорение составляет всего 3,5 - 4, независимо от того, сколько процессоров я ему выделил (я перепробовал 64 процессора).Профилирование показывает значительное время, затрачиваемое на Matrix-Vector, а остальное довольно номинально.Мой вопрос: у меня есть система с общей памятью с тоннами оперативной памяти и процессоров.Я попытался настроить реализацию кода OpenMP (в том числе Matrix Vector), но не помогло.Поможет ли это кодировать в MPI?Я не профессионал в MPI, но возможность точной настройки обмена сообщениями может немного помочь, но я не уверен.Есть какие-нибудь комментарии?

В целом, из прочитанной мною литературы: MPI = Distributed, OpenMP = Shared, но могут ли они хорошо работать на чужой территории?Как MPI в Shared?Это будет работать?Будет ли это лучше, чем реализация OpenMP, если все сделано хорошо?

Ответы [ 2 ]

4 голосов
/ 07 января 2012

Лучше всего использовать пакет линейной алгебры, который уже хорошо оптимизирован для многоядерной среды, и использовать его для умножения матрицы на вектор.Пакет Atlas , gotoblas (если у вас Nehalem или старше; к сожалению, он больше не обновляется) или реализации поставщика BLAS (например, MKL для процессоров Intel, ACML для AMD или VecLib для яблока, которые все стоят денег), имеют хорошие, хорошо настроенные, многопоточные реализации BLAS.Если у вас нет веских оснований полагать, что вы можете добиться большего успеха, чем те, кто работает на полную ставку, лучше использовать их.

Обратите внимание, что вы никогда не получите параллельное ускорение с DGEMV, которое вы делаете сDGEMM, просто потому, что вектор меньше другой матрицы и поэтому меньше работы;но вы все равно можете делать это неплохо, и вы обнаружите, что с этими библиотеками вы получаете гораздо лучшую производительность, чем с чем-либо, свернутым вручную, если вы не выполняли многоуровневую блокировку кэша.

3 голосов
/ 07 января 2012

Вы можете использовать MPI в общей среде (но не в OpenMP в распределенной).Однако достижение хорошего ускорения зависит в большей степени от ваших алгоритмов и зависимостей данных, чем от используемой технологии.Поскольку у вас много общей памяти, я бы порекомендовал вам придерживаться OpenMP и внимательно изучить, насколько эффективно вы используете свои ресурсы.

...