Многопоточный линейный решатель Eigen - с использованием прекондиционера IncompleteLU с Bicgstab
Я пытаюсь решить большую разреженную матрицу с BICGSTAB в Eigen. Я должен выполнить код параллельно, и кажется, что предварительное условие IncompleteLU - единственный способ, которым мое решение сходится. Однако, когда я использую BIGSTAB с предварительным условием IncompleteLU, код запускается в последовательном режиме. Можно ли изменить BIGSTAB.h и использовать INcompleteLU вместо DigonalPreconditioner?
0 ответов
Сам BiCGSTAB может работать параллельно в Eigen, если ваш код скомпилирован с OpenMP. Это верно независимо от вашего выбора предварительного кондиционера. Однако, я полагаю, вы заметили, что предварительная обработка ILUT в Eigen является последовательной. Это алгоритмическое ограничение ILUT, а не проблема реализации, поэтому единственный способ обойти это - использовать другой прекондиционер. Для справки, ViennaCL, другая библиотека линейной алгебры, реализует некоторые интересные параллельные предварительные условия: http://viennacl.sourceforge.net/doc/manual-algorithms.html. Если вы особенно заинтересованы в предобработчике типа LU, вы можете прочитать статью Чоу и Пателя, которая реализована в ViennaCL: https://www.cc.gatech.edu/~echow/pubs/parilu-sisc.pdf.