Come assemblare e risolvere un sistema a matrice in parallelo da valori generati in processori diversi?


10

Sto risolvendo un problema multiscala usando il metodo eterogeneo multiscala (HMM) . In sostanza, la mia procedura particolare utilizza il seguente processo iterativo:

  1. Risolvi molti sistemi a matrice locale.
  2. Calcola un valore di interesse dalle soluzioni dei sistemi locali.
  3. Assemblare un sistema a matrice globale dai "valori di interesse" locali
  4. Risolvi il sistema a matrice globale
  5. 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:

  1. Raccogliere i "valori di interesse" su un singolo processore e assemblare / risolvere il sistema a matrice globale in sequenza su un processore.
  2. Copia i valori di interesse su ogni processore e monta / risolvi lo stesso sistema di matrice globale in sequenza su ogni processore.
  3. 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?103103103103103103


Domanda molto interessante. Spero che qualcuno abbia delle buone risposte.
Inchiesta il

Hai un'idea di quanto sia grande il sistema globale rispetto ai sistemi locali? Cioè, se non ci sono sistemi locali da risolvere, il sistema globale è k n × k n per qualche k ? Hai un'idea di quanto sia grande n ? Le risposte alle tue domande dipenderanno molto dalle dimensioni. nkn×knkn
Bill Barth,

106

kn

k<100O(n)

Risposte:


4

Non credo che ci sia nessun caso in cui si voglia risolvere il grado 0. La risoluzione ridondante è quasi sempre migliore poiché, per piccole cose, allreduce è efficiente quanto ridurre, e il calcolo ridondante ne ha solo uno anziché due.

Tuttavia, se calcolare in modo ridondante su tutti i nodi o su un sottoinsieme o sottoinsiemi ridondanti dipende dall'hardware e dalle dimensioni del sistema. Quindi, dovresti avere un sistema in grado di fare uno qualsiasi di essi. Il PCREDUNDANT in PETSc può risolvere in modo ridondante su tutti i processi, alcuni processi o sottoinsiemi di processi in parallelo.

106


N=4096
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.