2014-12-04 2 views
0

Я думал, что у меня было очень четкое представление об этом до двух дней назад, но теперь я могу подумать об этом и сбить с толку. Я объясню, что я делаю, а затем задаю пару, вероятно, упрощенных вопросов, но я искал и нашел противоречивые ответы до сих пор. Наверняка кто-то может меня прямо посадить.Надеюсь, что быстрая параллельная оптимальная лапакская рутина (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:

  1. Atlas поставляется с "libptcblas" и "libptf77blas" библиотеки. Они должны быть потоковыми библиотеками, но я не замечаю разницы, когда я их использую, на самом деле он работает немного медленнее (я думаю, из-за накладных расходов). Нужно ли мне звонить, чтобы использовать их? Есть ли причина для использования этих библиотек над «libcblas» и «libf77blas?»?
  2. С OpenBlas он также создал очень специфический «libopenblas_penrynp-r0.2.12». Это потоковая версия? Опять же, я не замечаю никакой разницы, выполняющей этот blas по сравнению с запуском libopenblas.

Надеюсь, кто-то может устранить некоторые из моих вопросов о Бласе и указать мне на более быстрый метод решения. Благодаря!

ответ

1

Вы правильно ожидаете многопоточного поведения в основном из BLAS, а не подпрограмм LAPACK. Размер матриц достаточно велик, чтобы использовать многопоточную среду. Я не уверен в распространении использования BLAS в обычной программе ZGGEV, но это должно быть больше, чем всплеск.

Относительно ваших конкретных вопросов.

  1. Даже если я не использовал библиотеку ATLAS широко известно, , что «количество используемых потоков определяется во время компиляции». Обратитесь к http://math-atlas.sourceforge.net/faq.html#tnum.
  2. Конкретные libopenblas_*.a является копией или солевой ссылкой на libopenblas.a. Номер потока определяется во время компиляции.

Проверьте файлы журнала и std.out из сборки библиотеки и убедитесь, что они определили правильное количество ЦП.

Я заметил, что вы упомянули о нескольких машинах. Обратите внимание, что ATLAS - это автоматически настроенная библиотека. Поэтому вам нужно перекомпилировать библиотеку на каждой машине. С другой стороны, Openblas принимает DYNAMIC_ARCH=1 вариант в make. Эта библиотека динамически определяет оптимизацию подпрограмм на каждой машине.

Мое предложение для многопоточного теста построить Openblas с помощью

$ make DYNAMIC_ARCH=1 NUM_THREADS=8 

Тогда CALL ZGEMM в вашей программе. Это рутина, безусловно, оптимизирована и должна демонстрировать многопоточное поведение.

+0

спасибо! Я почти уверен, что полностью понимаю. Я построил отдельный ATLAS для каждого компьютера. Следуя вашему предложению, я провел ряд тестов с Openblas на ZGEMM, и я определенно вижу параллельное ускорение. При дальнейшей проверке я получаю некоторое ускорение с ZGGEV, но очень мало. Однако Openblas все еще работает намного быстрее, чем ATLAS, поэтому это плюс. –

Смежные вопросы