Estou resolvendo um problema de várias escalas usando o HMM (Heterogeneous Multiscale Method) . Essencialmente, meu procedimento específico usa o seguinte processo iterativo:
- Resolva muitos sistemas matriciais locais.
- Calcule um valor de interesse das soluções dos sistemas locais.
- Montar um sistema de matriz global a partir dos "valores de interesse" locais
- Resolver o sistema global de matrizes
- 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:
- Reúna os "valores de interesse" em um único processador e monte / resolva o sistema de matriz global sequencialmente em um processador.
- Copie os valores de interesse em cada processador e monte / resolva o mesmo sistema de matriz global sequencialmente em cada processador.
- 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?