Wie nützlich ist PETSc für dichte Matrizen?

14

Wo immer ich es gesehen habe, sagen PETSc-Tutorials / -Dokumente usw., dass es für die lineare Algebra nützlich ist und normalerweise angibt, dass spärliche Systeme davon profitieren. Was ist mit dichten Matrizen? Ich mache mir Sorgen, für dichtes A zu lösen .Ax=bA

Ich habe meinen eigenen Code für CG und QMR in Fortran geschrieben. Das Grundkonstrukt ist den Pseudo - Code zu zerreißen und BLAS - Routinen , wo immer möglich (zu addieren ddot, dnrmund dgemv) mit einer wenig Selbsteinstellung. Wie wird dies mit PETSc verglichen?

Ich weiß, die beste Antwort wäre, es selbst zu versuchen, aber aus Zeitgründen und aus anderen Gründen ist das nicht möglich.

Jede Hilfe wird sehr geschätzt.

Anfrage
quelle

Antworten:

7

Wenn Sie dichte Matrizen mit Struktur haben (z. B. schnelle Transformationen, Schur-Komplemente usw.), kann PETSc hilfreich sein. In diesen Fällen wird nicht die gesamte Matrix zusammengesetzt.

Für zusammengesetzte Systeme mit hoher Dichte verwendet PETSc derzeit PLAPACK. Die Matrixverteilung im nativen PETSc-Format ist jedoch nicht die beste Methode, um die Kommunikation zu minimieren (für die meisten Vorgänge). Jack Poulson, Matt Knepley und ich haben darüber gesprochen, die dichte lineare Algebra von PETSc zu portieren, um Elemental , die modernere Bibliothek für dichte lineare Algebra von Jack, zu verwenden . Es ist noch nicht passiert, aber wir werden es tun, wenn wir Zeit haben.

Wenn Sie eine umfassende Bibliothek für dichte lineare Algebra benötigen, verwenden Sie Elemental. Es ist wahrscheinlich, dass es für diese Vorgänge immer eine vollständigere API als PETSc gibt. Wenn Sie mit spärlichen oder nicht zusammengebauten Systemen interagieren müssen, ist es wahrscheinlich sinnvoll, bei PETSc zu bleiben und zu extrahieren, was Sie für die dichten Teile von Elemental benötigen (oder uns zu helfen, die PETSc-Schnittstelle für Elemental zu schreiben).

Jed Brown
quelle
Was wäre Ihre Antwort, wenn ich an einem Shared Memory-System arbeiten würde?
Anfrage
1
Sie können mehrere MPI-Prozesse oder mehrere PThreads verwenden. Ich halte es nicht für sinnvoll, parallele Software zu schreiben, die nur mit gemeinsam genutztem Speicher funktioniert, da normalerweise die Speicherlokalität, an die Sie beim Schreiben für verteilten Speicher denken, die Leistung im Vergleich zu allen Implementierungen mit Ausnahme der besten Thread-Implementierungen verbessert . Wenn Sie nur eine "serielle" API wünschen, die Threads intern für die dichte lineare Algebra verwendet, können Sie einen BLAS mit Threads verwenden.
Jed Brown
Ich möchte, dass meine Codes auf meiner Xeon 12-Core-Workstation funktionieren (derzeit werden keine Cluster angezeigt). Ich verwende Intel MKL für (Thread-) BLAS. Würden Sie mir trotzdem empfehlen, PETSc auszuprobieren?
Anfrage
Wenn alles, was Sie wollen, BLAS ist, sind Sie damit zufrieden, und Sie haben den Code bereits geschrieben, verwenden Sie ihn einfach. Wenn Sie mehr Flexibilität und / oder die Möglichkeit haben möchten, verteilten Speicher zu verwenden, möchten Sie möglicherweise PETSc.
Jed Brown
Flexibilität in Bezug auf? Verteilter Speicher?
Anfrage
5

Ö(n3)Ö(n2)

Da Sie erwähnt haben, dass Sie sich auf einem Shared-Memory-System befinden, hätte ich libFLAME und / oder PLASMA empfohlen , aber ich glaube nicht, dass BLAS mit Hersteller-Threading für Ihre Operationen der Stufen 1 und 2 wesentlich schneller ist.

Jed hat Elemental empfohlen , das ich gerade entwickle, aber ich werde noch einmal betonen, dass Operationen der Stufen 1 und 2 nicht der Hauptfokus von parallelen, dichten, linearen Algebra-Bibliotheken sind. Ich habe ehrlich gesagt noch nie eine dieser Routinen verglichen.

Jack Poulson
quelle
Nach dem, was ich erhalte, wird jede nachfolgende Bibliothek für parallele dichte lineare Algebra versuchen, Operationen wie Eigenvektorberechnung, Systemlösung und nicht BLAS zu optimieren. Außerdem sieht Elemental wirklich beeindruckend aus. Ich werde es auf jeden Fall versuchen, wenn ich kann.
Anfrage
Sie optimieren normalerweise BLAS der Stufe 3. Der Grund dafür ist, dass die meisten Benutzer der Bibliothek umfangreiche Berechnungen durchführen, die normalerweise auf BLAS der Stufe 3 abgebildet werden können.
Jack Poulson
Liegt das daran, dass BLAS 1/2 nicht besser werden kann? (Möglicherweise aufgrund der Surface-to-Volume-Eigenschaft?) O (N ^ 2) -Daten und O (N ^ 2) -Berechnung?
Anfrage
Dies liegt daran, dass BLAS 1 und 2 in der Berechnung im Allgemeinen Terme niedrigerer Ordnung sind. Das gesamte „Spiel“ der hochleistungsfähigen, dichten linearen Algebra besteht darin, bei jeder Operation genau die richtigen Augen zu machen, damit Sie xGEMM und Freunde für einen möglichst großen Teil der Arbeit anrufen können.
Jack Poulson
Ja, die Tatsache, dass sie ungefähr die gleiche Anzahl von Flops ausführen wie Memops, ist auch der Grund, warum sie so weit wie möglich vermieden werden.
Jack Poulson