Я решаю проблему мультимасштаба, используя Гетерогенный Метод Мультимасштаба (HMM) . По сути, моя конкретная процедура использует следующий итерационный процесс:
- Решите много локальных матричных систем.
- Вычислите значение интереса из решений локальных систем.
- Соберите глобальную матричную систему из локальных «ценностей интереса»
- Решить глобальную матричную систему
- Используйте решение глобальной матричной системы для формирования новых локальных матричных систем.
Повторяйте, пока не будут выполнены некоторые критерии сходимости.
Поскольку существует много локальных (независимых) линейных систем уравнений и несколько систем могут вписаться в локальную оперативную память, я полагаю, что лучше всего загружать несколько «локальных» систем в каждый процессор и решать каждую систему последовательно ( см. Этот опубликованный вопрос ).
Мой вопрос касается лучшей стратегии сборки и решения глобальной матричной системы. В моем конкретном случае глобальная матричная система достаточно мала, чтобы полностью поместиться в оперативную память любого процессора. Кроме того, локальные и глобальные матрицы не меняют размер между итерациями. Итак, я предвижу одну из трех возможных стратегий:
- Соберите «интересующие вас значения» на одном процессоре и последовательно соберите / решите глобальную матричную систему на одном процессоре.
- Скопируйте интересующие значения на каждый процессор и последовательно соберите / решите одну и ту же глобальную матричную систему на каждом процессоре.
- Предполагая, что каждый процессор обладает «интересующими значениями», необходимыми для создания смежных блоков глобальной матрицы, мы можем собирать разделы глобальной матрицы локально, а затем решать их вместе параллельно.
Я вижу некоторые преимущества / недостатки каждого метода. В способе 1 обмен данными не требуется на этапе решения, но обмен данными с корневым процессором и из него может стать узким местом (особенно в масштабе). Для способа 2 может потребоваться больше межпроцессорных обменов данными для сборки глобальной матрицы, чем в первом способе, но не требуется никакой связи на этапе решения или на этапе сборки локальной матрицы, который следует. Метод 3 не требует межпроцессорного взаимодействия для сборки локальных или глобальных матриц, но требует его на этапе решения.
Ответы:
Я не думаю, что есть какой-либо случай, когда вы хотите решить с рангом 0. Резервное решение почти всегда лучше, так как для небольших вещей allreduce так же эффективно, как и Reduce, и избыточные вычисления имеют только один вместо двух.
Однако то, нужно ли выполнять избыточные вычисления на всех узлах, или на подмножестве, или на избыточных подмножествах, зависит от аппаратного обеспечения и размера системы. Таким образом, у вас должна быть система, способная сделать любое из них. PCREDUNDANT в PETSc может решать избыточно все процессы, некоторые процессы или подмножества процессов параллельно.
источник