Я думал, что у меня было очень четкое представление об этом до двух дней назад, но теперь я могу подумать об этом и сбить с толку. Я объясню, что я делаю, а затем задаю пару, вероятно, упрощенных вопросов, но я искал и нашел противоречивые ответы до сих пор. Наверняка кто-то может меня прямо посадить.Надеюсь, что быстрая параллельная оптимальная лапакская рутина (gfortran) Вопросы
Я написал код fortran, который использует процедуру LAPACK для решения проблемы с собственными значениями. Моя проблема установлена (A-LB) x = 0, где L - мое собственное значение, x - мой собственный вектор (s), а A и B - квадратные, комплексные, несимметричные, неэрмитовые, нетриугольные матрицы. A и B являются как NxN, N в моем коде, как правило, составляют от 1000 до 3000.
В настоящий момент код работает отлично. Я использую оптимизированную установку атласа с LAPACK. Я специально запускаю подпрограмму ZGGEV (link), потому что на данный момент мне нужны ВСЕ решения для собственных значений и ВСЕ связанные решения собственных векторов.
Теперь я пытаюсь оптимизировать свой код, чтобы работать быстрее. Все компьютеры нашей лаборатории содержат 4 или 8 основных процессоров и работают на Ubuntu. Есть ли что-нибудь, что я могу сделать, чтобы использовать мой полный процессор при решении этой проблемы? Я смотрел на него следующие вещи:
- Я установил оптимизированную библиотеку OpenBlas и это, безусловно, быстрее, но я заметил, что до сих пор использует только 1 ядро (есть небольшой шип, где он использует более я полагаю. этот шип - это пакет BLAS, работающий параллельно, а LAPACK ограничен одним ядром?)
- Я исследовал PLASMA, но не похоже, что он решит мое уравнение в его текущей форме.
- Я заглянул в ScaLAPACK, но это сейчас на моей голове, и я не уверен, что стоит научиться использовать 8-ядерный процессор. Кроме того, я использую threadmp threading для более поздней части моего кода, и я никогда не комбинировал openmp с MPI.
Наконец, у меня есть несколько конкретных вопросов Blas:
- Atlas поставляется с "libptcblas" и "libptf77blas" библиотеки. Они должны быть потоковыми библиотеками, но я не замечаю разницы, когда я их использую, на самом деле он работает немного медленнее (я думаю, из-за накладных расходов). Нужно ли мне звонить, чтобы использовать их? Есть ли причина для использования этих библиотек над «libcblas» и «libf77blas?»?
- С OpenBlas он также создал очень специфический «libopenblas_penrynp-r0.2.12». Это потоковая версия? Опять же, я не замечаю никакой разницы, выполняющей этот blas по сравнению с запуском libopenblas.
Надеюсь, кто-то может устранить некоторые из моих вопросов о Бласе и указать мне на более быстрый метод решения. Благодаря!
спасибо! Я почти уверен, что полностью понимаю. Я построил отдельный ATLAS для каждого компьютера. Следуя вашему предложению, я провел ряд тестов с Openblas на ZGEMM, и я определенно вижу параллельное ускорение. При дальнейшей проверке я получаю некоторое ускорение с ZGGEV, но очень мало. Однако Openblas все еще работает намного быстрее, чем ATLAS, поэтому это плюс. –