Як зібрати та вирішити матричну систему паралельно зі значеннями, що генеруються у різних процесорах?


10

Я вирішую багатомасштабну задачу за допомогою гетерогенного багатомасштабного методу (HMM) . По суті, моя конкретна процедура використовує такий ітераційний процес:

  1. Розв’яжіть багато локальних матричних систем.
  2. Обчисліть значення інтересу за рішеннями локальних систем.
  3. Зберіть глобальну матричну систему з локальних "цінностей, що цікавлять"
  4. Розв’яжіть глобальну матричну систему
  5. Використовуйте рішення глобальної матричної системи для формування нових локальних матричних систем.

Повторюйте, поки не будуть виконані деякі критерії конвергенції.

Оскільки існує багато локальних (незалежних) лінійних систем рівнянь, і декілька систем можуть вміщуватися в локальну оперативну пам'ять, я вважаю, що найкраще завантажувати кілька "локальних" систем у кожен процесор і вирішувати кожну систему послідовно ( див. Це розміщене запитання ).

Моє запитання стосується найкращої стратегії зібрати та вирішити глобальну матричну систему. У моєму конкретному випадку система глобальної матриці досить мала, щоб вона могла повністю вміститися в оперативній пам'яті будь-якого процесора. Крім того, локальні та глобальні матриці не змінюють розмір між ітераціями. Отже, я передбачаю одну з трьох можливих стратегій:

  1. Зберіть «цікавлять значення» на одному процесорі та збирайте / вирішуйте глобальну матричну систему послідовно на одному процесорі.
  2. Скопіюйте значення, що цікавлять, на кожен процесор і послідовно збирайте / вирішуйте ту саму глобальну матричну систему на кожному процесорі.
  3. Якщо припустити, що кожен процесор володіє "значеннями, що цікавлять", необхідними для створення суміжних блоків глобальної матриці, то ми можемо зібрати розділи глобальної матриці локально, а потім вирішити їх разом паралельно.

Я бачу деякі переваги / недоліки кожного методу. У Способі 1 не потрібно спілкуватися на етапі вирішення, але зв'язок з кореневим процесором і з нього може стати вузьким місцем (особливо в масштабі). Спосіб 2 може зажадати більше міжпроцесорних комунікацій для збирання глобальної матриці, ніж перший метод, однак комунікація не потрібна на етапі вирішення або на етапі складання локальної матриці, що слідує. Спосіб 3 не вимагає міжпроцесорного зв'язку для складання локальних або глобальних матриць, але вимагає його на етапі вирішення.

Припустимо, що кожна локальна система знаходиться в порядку x 10 3 і існує 10 3 x 10 3 локальних матричних систем. Давайте припустимо, що система глобальної матриці має розмір 10 3 x 10 3 . Згідно з цими припущеннями, яка з трьох вищезгаданих стратегій, ймовірно, призведе до швидшого вирішення глобальної системи? Чи існують інші стратегії відображення глобальної матриці, які можуть працювати швидше за кожну ітерацію?103103103103103103


Дуже цікаве запитання. Я сподіваюся, що хтось має хороші відповіді.
Запит

нкн×кнкн

106

кн

к<100О(н)

Відповіді:


4

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

Однак, чи потрібно обчислювати надлишки на всіх вузлах, або на підмножині, або надлишки підмножини, залежить від апаратного забезпечення та розміру системи. Таким чином, ви повинні мати систему, яка може виконувати будь-яку з них. PCREDUNDANT в PETSc може паралельно вирішувати всі процеси, деякі процеси або підмножини процесів.

106


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