Ответ 1
Как упоминалось в @larsmans (с, скажем, MKL), вы все еще используете интерфейсы LAPACK + BLAS, но вы просто найдете настроенную многопоточную версию для своей платформы. MKL замечательный, но дорогой. Другие варианты с открытым исходным кодом включают:
- OpenBLAS/GotoBLAS, Поддержка Nehalem должна работать нормально, но пока не настроена поддержка westmere. Многопоточность очень хорошо.
- Atlas: автоматически настраивается на вашу архитектуру во время установки. вероятно, медленнее для "типичных" матриц (например, квадратный SGEMM), но может быть быстрее для нечетных случаев, а для westmere может даже выбить OpenBLAS/GotoBLAS, не проверял это сам. В основном оптимизирован для серийного случая, но включает в себя параллельные многопоточные процедуры.
- Plasma - реализация LAPACK специально разработана для многоядерных процессоров.
Я также согласен с комментарием Марка; в зависимости от того, какие подпрограммы LAPACK вы используете, материал с распределенной памятью с MPI может быть быстрее, чем многопоточность. Это вряд ли будет иметь место с процедурами BLAS, но для чего-то более сложного (скажем, для собственных значений/векторных подпрограмм в LAPACK) стоит проверить. Хотя верно, что вызовы функций MPI являются накладными расходами, что делает вещи в режиме с распределенной памятью, вы не должны беспокоиться о ложном совместном использовании, синхронизации доступа к общим переменным и т.д.