Рідкий лінійний розв'язувач для багатьох правих боків


12

Мені потрібно вирішити ту саму розріджену лінійну систему (від 300x300 до 1000x1000) з багатьма правими сторонами (від 300 до 1000). На додаток до цієї першої проблеми, я також хотів би вирішити різні системи, але з тими ж ненульовими елементами (просто різними значеннями), тобто багато рідкісних систем з постійною схемою розрідженості. Мої матриці невизначені.

Виконання факторизації та ініціалізації не важливо, але ефективність етапу вирішення є. В даний час я розглядаю PaStiX або Umfpack, і, мабуть, я пограю з Petsc (який підтримує обидва рішення) Чи є бібліотеки, здатні скористатися моїми конкретними потребами (векторизація, багатопотокова передача) чи варто покладатися на загальні вирішувачі, і може, їх трохи змінити для моїх потреб?

Що робити, якщо розріджена матриця більша, до ?106×106

Відповіді:


10

Не беручи сторону дискусію про те, чи слід використовувати прямі чи ітеративні розв’язувачі, я просто хочу додати два моменти:

  1. Існують методи Крилова для систем з декількома правими сторонами (звані блоковими методами Крилова ). Як додатковий бонус, вони часто мають швидше зближення, ніж стандартні методи Крилова, оскільки простір Крилова побудований з більшої колекції векторів. Дивіться Діанна П. О’Лірі, алгоритм градієнта блоку кон'югації та пов'язані з ними методи . Лінійна алгебра та її програми 29 (1980), стор 239-322. та Мартін Г. Гутнехт, Простірні методи Блока Крилова для лінійних систем з декількома правими сторонами: вступ (2007).

  2. Якщо у вас є різні матриці з однаковим малюнком sparsity, ви можете попередньо обчислити символьну факторизацію для першої матриці, яку можна повторно використати при обчисленні числової факторизації для цієї та наступних матриць. (У UMFPACK ви можете це зробити, використовуючи umfpack di symbolicі передаючи результат umfpack_di_numeric.)


9

Зазвичай існує компроміс між кількістю роботи, яку ви вкладаєте над створенням хорошого попереднього передумови для ітеративного вирішувача, та роботою, яку ви заощадите, використовуючи хороший попередній передумови при фактичному вирішенні лінійних систем. У вашому випадку випадок досить зрозумілий: вкладіть якомога більше роботи, щоб створити хороший передумовник, оскільки вам доведеться вирішити стільки лінійних систем. Насправді, я вважаю, що доречно вкласти час, щоб отримати ідеальний попередній передумови: розпад LU (наприклад, використовуючи UMFPACK або розв'язувач Pardiso, який входить до MKL від Intel). Потім просто нанесіть це розкладання стільки разів, скільки потрібно. Якщо ви маєте вирішити лінійні системи , то нічого не можна очікувати, щоб перемогти точне розкладання.O(N)


4
Ваше останнє твердження є дискусійним. Розглянемо точну мультифронтальну факторизацію дискретизації 3D FEM або FD над кубом, що потребує роботи та використання . Точні розв'язки вимагають, таким чином, пробілів з правого боку, і тому для досить великого будь-який ітеративний розв'язувач з меншою асимптотичною складністю буде швидшим. O ( N 4 / 3 ) O ( N 4 / 3 ) NO(N2)O(N4/3)O(N4/3)N
Джек Поульсон

3
Може бути. Але з точки зору практичного розгляду, рідкісні прямі розв'язувачі все ще швидко пронизуються, враховуючи, що константа перед рівномірним вирішувачем досить велика, тоді як постійна перед є ні. O ( N 4 / 3 )O(N)O(N4/3)
Вольфганг Бангерт

2
Проблема полягає в тому, що у вас є пам'ять і терпіння для факторизації приблизно в точці кроссовера. Для 7-точкового Лаплаціана мультирешітці потрібно близько 50 флопів / dof, що призводить до кроссовера flops (проти зворотного вирішення) приблизно в dofs. Для зворотного рішення використовується набагато більше пам’яті, але ядра для багатьох правих сторін зазвичай доступні. Мультисетка зазвичай не пишеться для багатьох правих сторін, таким чином жертвуючи потенціалом векторизації. Я б загрожував, що ви можете написати алгоритм MG, для якого час-на-RHS менше, ніж рішення CHOLMOD (або будь-який інший пакет) для 3D Laplacian на рівні . n < 300 k105n<300k
Джед Браун

3

Вам не зовсім зрозуміло у вашій постановці проблеми, коли ви говорите про "однакові ненульові елементи (просто різні значення)". Ви говорите про те, що матриця має константну шаблонність, але фактичні значення змінюються? Або ви кажете, що матриця насправді є постійною?

Якщо припустити, що розріджена матриця є постійною і змінюється лише права частина, то вам слід розглянути методи, що використовують пряму факторизацію (форми ) матриці, а потім вирішити для кожної правої сторони вперед / відстале заміщення. Після того, як факторизація буде завершена, кожне рішення буде надзвичайно швидким ( час для абсолютно щільних факторів, але для рідкісних факторів це буде пропорційно кількості ненулів у факторах.) O ( n 2 )PA=LUO(n2)

Для декількох правої сторони та систем рівнянь такого розміру ітераційні методи, як правило, не варто.

Усі згадані вами пакети пропонують методи прямої факторизації (хоча PetSc в основному відомий своїми ітераційними рішеннями.) Однак ваші системи настільки крихітні, що навряд чи вдасться отримати значні паралельні прискорення, особливо в середовищі розподіленої пам'яті.

Я б запропонував використовувати Umfpack для цієї роботи - PaStix і PetSc є надмірними.


Дякую за вашу відповідь. Для уточнення: я попросив спершу одну матрицю з багатьма правими сторонами, а потім, ще одна проблема - це збірка матриць з такою ж рідкістю патерну, але значення змінюються, кожна з них повинна бути вирішена протягом багатьох резус. Субсидіальне питання: що робити, якщо розріджена матриця зараз дорівнює 10 ^ 5x10 ^ 5 до 10 ^ 6x10 ^ 6?
nat chouf

2
105

Використання ітеративного методу для великих систем із лише однією правою стороною може мати сенс, особливо якщо вам не потрібні дуже точні рішення, особливо, якщо ви можете знайти ефективний попередній кондиціонер або ваші системи вже належними умовами. Однак якщо ваші системи погано кондиціоновані, вам потрібні точні рішення, і ви не можете знайти хорошого попереднього кондиціонера, то вам, швидше за все, буде краще з прямою факторизацією.
Брайан Борчерс

N106
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.