Wie kann ein Matrixsystem parallel aus Werten zusammengesetzt und gelöst werden, die in verschiedenen Prozessoren generiert wurden?

10

Ich löse ein Multiskalenproblem mit der Heterogenen Multiskalenmethode (HMM) . Im Wesentlichen verwendet mein spezielles Verfahren den folgenden iterativen Prozess:

  1. Lösen Sie viele lokale Matrixsysteme.
  2. Berechnen Sie einen interessierenden Wert aus den Lösungen der lokalen Systeme.
  3. Stellen Sie ein globales Matrixsystem aus den lokalen "interessierenden Werten" zusammen.
  4. Lösen Sie das globale Matrixsystem
  5. Verwenden Sie die Lösung des globalen Matrixsystems, um neue lokale Matrixsysteme zu bilden.

Wiederholen, bis einige Konvergenzkriterien erfüllt sind.

Da es viele lokale (unabhängige) lineare Gleichungssysteme gibt und mehrere Systeme in den lokalen RAM-Speicher passen können, ist es meiner Meinung nach am besten, mehrere "lokale" Systeme in jeden Prozessor zu laden und jedes System nacheinander zu lösen ( siehe diese gestellte Frage ).

Meine Frage betrifft die beste Strategie zur Zusammenstellung und Lösung des globalen Matrixsystems. In meinem speziellen Fall ist das globale Matrixsystem klein genug, um vollständig in den RAM-Speicher eines Prozessors zu passen. Darüber hinaus ändern die lokalen und globalen Matrizen die Größe zwischen den Iterationen nicht. Daher sehe ich eine von drei möglichen Strategien voraus:

  1. Sammeln Sie die "interessierenden Werte" auf einem einzelnen Prozessor und bauen Sie das globale Matrixsystem nacheinander auf einem Prozessor zusammen.
  2. Kopieren Sie die interessierenden Werte auf jeden Prozessor und stellen Sie auf jedem Prozessor nacheinander dasselbe globale Matrixsystem zusammen / lösen Sie es.
  3. Unter der Annahme, dass jeder Prozessor die "interessierenden Werte" besitzt, die erforderlich sind, um zusammenhängende Blöcke der globalen Matrix zu erzeugen, können wir Partitionen der globalen Matrix lokal zusammenstellen und sie dann parallel lösen.

Ich kann einige Vor- und Nachteile für jede Methode erkennen. Bei Methode 1 ist in der Lösungsphase keine Kommunikation erforderlich, aber die Kommunikation zum und vom Root-Prozessor kann zu einem Engpass werden (insbesondere im Maßstab). Verfahren 2 erfordert möglicherweise mehr Interprozessorkommunikation, um die globale Matrix zusammenzusetzen als das erste Verfahren, jedoch ist in der Lösungsphase oder in der folgenden lokalen Matrixassemblierungsphase keine Kommunikation erforderlich. Methode 3 erfordert keine Interprozessorkommunikation zum Zusammensetzen der lokalen oder globalen Matrizen, erfordert sie jedoch in der Lösungsphase.

103103103103103103

Paul
quelle
Sehr interessante Frage. Ich hoffe jemand hat gute Antworten.
Anfrage
nkn×knkn
106
kn
k<100O(n)

Antworten:

4

Ich glaube nicht, dass es einen Fall gibt, in dem Sie auf Rang 0 lösen möchten. Redundantes Lösen ist fast immer besser, da bei kleinen Dingen allreduce so effizient wie reduzieren ist und redundante Berechnungen nur eins statt zwei haben.

Ob auf allen Knoten oder auf einer Teilmenge oder auf redundanten Teilmengen redundant berechnet werden soll, hängt jedoch von der Hardware- und Systemgröße ab. Daher sollten Sie ein System haben, das alle diese Funktionen ausführen kann. Der PCREDUNDANT in PETSc kann alle Prozesse, einige Prozesse oder Teilmengen von Prozessen parallel redundant lösen.

106

Matt Knepley
quelle
N=4096