¿Cómo ensamblar y resolver un sistema matricial en paralelo a partir de valores generados en diferentes procesadores?

10

Estoy resolviendo un problema multiescala usando el método heterogéneo multiescala (HMM) . Esencialmente, mi procedimiento particular utiliza el siguiente proceso iterativo:

  1. Resuelve muchos sistemas matriciales locales.
  2. Calcule un valor de interés a partir de las soluciones de los sistemas locales.
  3. Ensamblar un sistema de matriz global a partir de los "valores de interés" locales
  4. Resolver el sistema matricial global
  5. Use la solución del sistema matricial global para formar nuevos sistemas matriciales locales.

Repita hasta que se cumplan algunos criterios de convergencia.

Como hay muchos sistemas lineales locales (independientes) de ecuaciones y múltiples sistemas pueden caber en la memoria RAM local, creo que es mejor cargar múltiples sistemas "locales" en cada procesador y resolver cada sistema secuencialmente ( vea esta pregunta publicada ).

Mi pregunta se refiere a la mejor estrategia para ensamblar y resolver el sistema matricial global. En mi caso particular, el sistema de matriz global es lo suficientemente pequeño como para que quepa completamente en la memoria RAM de cualquier procesador. Además, las matrices locales y globales no cambian de tamaño entre iteraciones. Entonces, preveo una de tres estrategias posibles:

  1. Reúna los "valores de interés" en un único procesador y ensamble / resuelva el sistema de matriz global secuencialmente en un procesador.
  2. Copie los valores de interés en cada procesador y ensamble / resuelva el mismo sistema de matriz global secuencialmente en cada procesador.
  3. Suponiendo que cada procesador posee los "valores de interés" necesarios para producir bloques contiguos de la matriz global, entonces podemos ensamblar particiones de la matriz global localmente, y luego resolverlos juntos en paralelo.

Puedo ver algunas ventajas / desventajas de cada método. En el Método 1, no es necesaria la comunicación en la fase de resolución, pero la comunicación hacia y desde el procesador raíz puede convertirse en un cuello de botella (especialmente a escala). El método 2 puede requerir más comunicaciones entre procesadores para ensamblar la matriz global que el primer método, pero no se necesita comunicación en la fase de resolución o en la etapa de ensamblaje de la matriz local que sigue. El método 3 no requiere comunicación entre procesadores para el ensamblaje de las matrices locales o globales, pero lo requiere en la fase de resolución.

Suponga que cada sistema local está en el orden de x y hay x sistemas de matriz local. Supongamos además que el sistema de matriz global tiene un tamaño de x . Según estos supuestos, ¿cuál de las tres estrategias mencionadas probablemente conducirá a una solución más rápida del sistema global? ¿Existen otras estrategias de mapeo para la matriz global que podrían funcionar más rápido por iteración?10 3 10 3 10 3 10 3 10 3103103103103103103

Paul
fuente
Pregunta muy interesante Espero que alguien tenga buenas respuestas.
Investigación
¿Tiene una idea sobre qué tan grande es el sistema global en relación con los sistemas locales? Es decir, si hay sistemas locales a resolver, ¿es el sistema global para algunos ? ¿Tienes una idea de qué tan grande es ? Es probable que las respuestas a sus preguntas dependan en gran medida de los tamaños. k n × k n k nnkn×knkn
Bill Barth
@BillBarth: Supongamos que n es del orden de , y queremos que k sea cada vez más grande. 106
Paul
Entonces, ¿la respuesta a mi primera pregunta es "sí"? ¿Y qué tan grande quieres que sea ? Es decir, ¿finalmente va a extraer un millón de parámetros de los sistemas locales, o se mantendrá relativamente pequeño en comparación con ? ¿Qué tan grandes son los sistemas locales? Finalmente, ¿todos los sistemas son más densos o dispersos? nkn
Bill Barth
@BillBarth: Por ahora, digamos que y la matriz global extraerá solo un parámetro de cada uno de los sistemas lineales. El tamaño de los sistemas locales puede variar de son donde n es el tamaño de la matriz global, y todos los sistemas lineales (locales y globales) son dispersos, simétricos, definidos positivamente y diagonalmente dominantes. O ( n )k<100O(n)
Paul

Respuestas:

4

No creo que haya ningún caso en el que desee resolver en el rango 0. La resolución redundante es casi siempre mejor, ya que, para cosas pequeñas, toda reducción es tan eficiente como reducir, y el cálculo redundante solo tiene uno en lugar de dos.

Sin embargo, si calcular de manera redundante en todos los nodos, o en un subconjunto, o subconjuntos redundantes depende del tamaño del hardware y del sistema. Por lo tanto, debe tener un sistema que pueda hacer cualquiera de ellos. PCREDUNDANT en PETSc puede resolver de forma redundante en todos los procesos, algunos procesos o subconjuntos de procesos en paralelo.

106

Matt Knepley
fuente
N=4096