Estoy resolviendo un problema multiescala usando el método heterogéneo multiescala (HMM) . Esencialmente, mi procedimiento particular utiliza el siguiente proceso iterativo:
- Resuelve muchos sistemas matriciales locales.
- Calcule un valor de interés a partir de las soluciones de los sistemas locales.
- Ensamblar un sistema de matriz global a partir de los "valores de interés" locales
- Resolver el sistema matricial global
- 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:
- Reúna los "valores de interés" en un único procesador y ensamble / resuelva el sistema de matriz global secuencialmente en un procesador.
- Copie los valores de interés en cada procesador y ensamble / resuelva el mismo sistema de matriz global secuencialmente en cada procesador.
- 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 3
Respuestas:
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.
fuente