Параллельная линейная алгебра для многоядерной системы

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

Теперь я использую подпрограммы LAPACK/BLAS, но мне нужно использовать мою машину (24-ядерный Xeon X5690).

Я нашел проекты типа pblas и scalapack, но все они, похоже, сосредоточены на распределенных вычислениях и использовании MPI.

У меня нет кластера, все вычисления будут выполняться на одном сервере, а использование MPI выглядит как излишний.

Есть ли у кого-нибудь какие-либо предложения по этому поводу?

Ответ 1

Как упоминалось в @larsmans (с, скажем, MKL), вы все еще используете интерфейсы LAPACK + BLAS, но вы просто найдете настроенную многопоточную версию для своей платформы. MKL замечательный, но дорогой. Другие варианты с открытым исходным кодом включают:

  • OpenBLAS/GotoBLAS, Поддержка Nehalem должна работать нормально, но пока не настроена поддержка westmere. Многопоточность очень хорошо.
  • Atlas: автоматически настраивается на вашу архитектуру во время установки. вероятно, медленнее для "типичных" матриц (например, квадратный SGEMM), но может быть быстрее для нечетных случаев, а для westmere может даже выбить OpenBLAS/GotoBLAS, не проверял это сам. В основном оптимизирован для серийного случая, но включает в себя параллельные многопоточные процедуры.
  • Plasma - реализация LAPACK специально разработана для многоядерных процессоров.

Я также согласен с комментарием Марка; в зависимости от того, какие подпрограммы LAPACK вы используете, материал с распределенной памятью с MPI может быть быстрее, чем многопоточность. Это вряд ли будет иметь место с процедурами BLAS, но для чего-то более сложного (скажем, для собственных значений/векторных подпрограмм в LAPACK) стоит проверить. Хотя верно, что вызовы функций MPI являются накладными расходами, что делает вещи в режиме с распределенной памятью, вы не должны беспокоиться о ложном совместном использовании, синхронизации доступа к общим переменным и т.д.

Ответ 2

Рассмотрим использование Intel MKL. OpenBLAS также может быть довольно быстрым, хотя я еще не запускал его нa > четырехъядерных машинах.