Sto risolvendo un problema multiscala usando il metodo eterogeneo multiscala (HMM) . In sostanza, la mia procedura particolare utilizza il seguente processo iterativo:
- Risolvi molti sistemi a matrice locale.
- Calcola un valore di interesse dalle soluzioni dei sistemi locali.
- Assemblare un sistema a matrice globale dai "valori di interesse" locali
- Risolvi il sistema a matrice globale
- Utilizzare la soluzione del sistema a matrice globale per formare nuovi sistemi a matrice locale.
Ripetere fino a quando non vengono soddisfatti alcuni criteri di convergenza.
Dato che ci sono molti sistemi lineari (indipendenti) locali di equazioni e più sistemi possono adattarsi alla memoria RAM locale, immagino che sia meglio caricare più sistemi "locali" in ciascun processore e risolvere ogni sistema in modo sequenziale ( vedere questa domanda pubblicata ).
La mia domanda riguarda la migliore strategia per assemblare e risolvere il sistema a matrice globale. Nel mio caso particolare, il sistema a matrice globale è abbastanza piccolo da adattarsi interamente alla memoria RAM di qualsiasi processore. Inoltre, le matrici locali e globali non cambiano dimensione tra le iterazioni. Quindi, prevedo una delle tre possibili strategie:
- Raccogliere i "valori di interesse" su un singolo processore e assemblare / risolvere il sistema a matrice globale in sequenza su un processore.
- Copia i valori di interesse su ogni processore e monta / risolvi lo stesso sistema di matrice globale in sequenza su ogni processore.
- Supponendo che ciascun processore disponga dei "valori di interesse" necessari per produrre blocchi contigui della matrice globale, quindi possiamo assemblare partizioni della matrice globale localmente, quindi risolverli insieme in parallelo.
Vedo alcuni vantaggi / svantaggi per ciascun metodo. Nel metodo 1, nessuna comunicazione è necessaria nella fase di risoluzione, ma la comunicazione da e verso il root processor può diventare un collo di bottiglia (specialmente su scala). Il metodo 2 può richiedere più comunicazioni interprocessore per assemblare la matrice globale rispetto al primo metodo, ma non è necessaria alcuna comunicazione nella fase di risoluzione o nella fase di assemblaggio della matrice locale che segue. Il metodo 3 non richiede alcuna comunicazione interprocessore per l'assemblaggio delle matrici locali o globali, ma lo richiede nella fase di risoluzione.
Supponiamo che ogni sistema locale sia nell'ordine di x 10 3 e che ci siano 10 3 x 10 3 sistemi a matrice locale. Supponiamo inoltre che il sistema a matrice globale abbia dimensioni 10 3 x 10 3 . In base a questi presupposti, quale delle tre suddette strategie porterà probabilmente a una soluzione più rapida del sistema globale? Esistono altre strategie di mappatura per la matrice globale che potrebbero funzionare più rapidamente per iterazione?