Как собрать и решить матричную систему параллельно из значений, сгенерированных в разных процессорах?

10

Я решаю проблему мультимасштаба, используя Гетерогенный Метод Мультимасштаба (HMM) . По сути, моя конкретная процедура использует следующий итерационный процесс:

  1. Решите много локальных матричных систем.
  2. Вычислите значение интереса из решений локальных систем.
  3. Соберите глобальную матричную систему из локальных «ценностей интереса»
  4. Решить глобальную матричную систему
  5. Используйте решение глобальной матричной системы для формирования новых локальных матричных систем.

Повторяйте, пока не будут выполнены некоторые критерии сходимости.

Поскольку существует много локальных (независимых) линейных систем уравнений и несколько систем могут вписаться в локальную оперативную память, я полагаю, что лучше всего загружать несколько «локальных» систем в каждый процессор и решать каждую систему последовательно ( см. Этот опубликованный вопрос ).

Мой вопрос касается лучшей стратегии сборки и решения глобальной матричной системы. В моем конкретном случае глобальная матричная система достаточно мала, чтобы полностью поместиться в оперативную память любого процессора. Кроме того, локальные и глобальные матрицы не меняют размер между итерациями. Итак, я предвижу одну из трех возможных стратегий:

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

Я вижу некоторые преимущества / недостатки каждого метода. В способе 1 обмен данными не требуется на этапе решения, но обмен данными с корневым процессором и из него может стать узким местом (особенно в масштабе). Для способа 2 может потребоваться больше межпроцессорных обменов данными для сборки глобальной матрицы, чем в первом способе, но не требуется никакой связи на этапе решения или на этапе сборки локальной матрицы, который следует. Метод 3 не требует межпроцессорного взаимодействия для сборки локальных или глобальных матриц, но требует его на этапе решения.

103103103103103103

Пол
источник
Очень интересный вопрос Я надеюсь, что у кого-то есть хорошие ответы.
Дознание
nkn×knkn
106
kn
k<100O(n)

Ответы:

4

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

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

106

Мэтт Кнепли
источник
N=4096