Como montar e resolver um sistema matricial paralelamente aos valores gerados em diferentes processadores?

10

Estou resolvendo um problema de várias escalas usando o HMM (Heterogeneous Multiscale Method) . Essencialmente, meu procedimento específico usa o seguinte processo iterativo:

  1. Resolva muitos sistemas matriciais locais.
  2. Calcule um valor de interesse das soluções dos sistemas locais.
  3. Montar um sistema de matriz global a partir dos "valores de interesse" locais
  4. Resolver o sistema global de matrizes
  5. Use a solução do sistema de matriz global para formar novos sistemas de matriz local.

Repita até que alguns critérios de convergência sejam atendidos.

Como existem muitos sistemas lineares locais (independentes) de equações e vários sistemas podem caber na memória RAM local, acho que é melhor carregar vários sistemas "locais" em cada processador e resolver cada sistema sequencialmente ( consulte esta pergunta postada ).

Minha pergunta diz respeito à melhor estratégia para montar e resolver o sistema de matriz global. No meu caso particular, o sistema de matriz global é pequeno o suficiente para caber inteiramente na memória RAM de qualquer processador. Além disso, as matrizes locais e globais não alteram o tamanho entre as iterações. Portanto, prevejo uma das três estratégias possíveis:

  1. Reúna os "valores de interesse" em um único processador e monte / resolva o sistema de matriz global sequencialmente em um processador.
  2. Copie os valores de interesse em cada processador e monte / resolva o mesmo sistema de matriz global sequencialmente em cada processador.
  3. Assumindo que cada processador possua os "valores de interesse" necessários para produzir blocos contíguos da matriz global, podemos montar partições da matriz global localmente e resolvê-las juntas em paralelo.

Eu posso ver algumas vantagens / desvantagens de cada método. No método 1, nenhuma comunicação é necessária na fase de solução, mas a comunicação de e para o processador raiz pode se tornar um gargalo (especialmente em escala). O método 2 pode exigir mais comunicações entre processadores para montar a matriz global do que o primeiro método, mas nenhuma comunicação é necessária na fase de solução ou no estágio de montagem da matriz local a seguir. O método 3 não requer comunicação entre processadores para a montagem das matrizes locais ou globais, mas requer na fase de solução.

Suponha que cada sistema local esteja na ordem de x 10 3 e haja 10 3 x 10 3 sistemas matriciais locais. Vamos supor ainda que o sistema de matriz global tenha o tamanho 10 3 x 10 3 . Sob essas premissas, qual das três estratégias mencionadas provavelmente levará a uma solução mais rápida do sistema global? Existem outras estratégias de mapeamento para a matriz global que podem funcionar mais rapidamente por iteração?103103103103103103

Paulo
fonte
Pergunta muito interessante. Espero que alguém tenha boas respostas.
Inquérito
Você tem uma idéia de quão grande é o sistema global em relação aos sistemas locais? Ou seja, se não existem sistemas locais a serem resolvidos, o sistema global k n × k n para alguns k ? Você tem uma idéia de quão grande é n ? As respostas para suas perguntas provavelmente dependerão muito dos tamanhos. nkn×knkn
Bill Barth
106
kn
k<100O(n)

Respostas:

4

Eu não acho que exista um caso em que você queira resolver na classificação 0. A solução redundante é quase sempre melhor, pois, para pequenas coisas, allreduce é tão eficiente quanto reduzir, e a computação redundante possui apenas um em vez de dois.

No entanto, a computação redundante em todos os nós, subconjuntos ou subconjuntos redundantes depende do tamanho do hardware e do sistema. Portanto, você deve ter um sistema que possa executar qualquer um deles. O PCREDUNDANT no PETSc pode resolver redundantemente todos os processos, alguns processos ou subconjuntos de processos em paralelo.

106

Matt Knepley
fonte
N=4096