Testen Sie die Skalierbarkeit Ihres PETSc-Algorithmus auf Rescale

Portable Extensible Toolkit for Scientific Computation (PETSc) ist eine vom Argonne National Laboratory entwickelte Suite von Datenstrukturen und Routinen zur skalierbaren (parallelen) Lösung wissenschaftlicher Anwendungen, die durch partielle Differentialgleichungen modelliert werden. PETSc ist eine der weltweit am häufigsten verwendeten parallelen numerischen Softwarebibliotheken für partielle Differentialgleichungen und dünnbesetzte Matrizenberechnungen.
Wenn Wissenschaftler oder Algorithmenentwickler einen neuen parallelen Algorithmus in PETSc fertigstellen, müssen sie ihn üblicherweise in einem Multi-Core-Computercluster ausführen, um seine Skalierbarkeit und Beschleunigung zu testen. Ein Cluster ist typischerweise eine gemeinsam genutzte Rechenressource an einem Universität, Regierungoder Unternehmen mit erheblichem Verwaltungsaufwand zur Wartung der HPC-Ressource. Darüber hinaus muss der Wissenschaftler oder Entwickler zum Erstellen eines Laufs die Umgebung vorbereiten, was schwierig und zeitaufwändig sein kann, und alles Unerwartete während des Laufs kann zu Fehlern und zur Nichtgenerierung von Ausgabedaten führen.
Mit Rescale wird das Testen der Skalierbarkeit des PETSc-Algorithmus wesentlich einfacher. Ein Wissenschaftler oder Entwickler kann den Hardwaretyp und die Anzahl der Kerne angeben und den Job dann mit einer Internetverbindung und einem Webbrowser ausführen.
Zu testender Algorithmus
Der Algorithmus, den ich testen werde, stammt aus dem offiziellen Tutorial des PETSc-Pakets. Der Code löst ein lineares System parallel zu KSP. Ich habe KSP gewählt, da es eine der am häufigsten verwendeten Operationen im PETSc-Paket ist. Ich habe eine kleine Änderung vorgenommen, die die Zeitstempel der Operationen jedes PETSc-Funktionsaufrufs für alle Prozesse zur weiteren Analyse in eine Protokolldatei ausgibt.
Hier ist die Quellcode nach meinen Änderungen. Ich habe auch eine Makefile für die Zusammenstellung.
KSP löst die lineare Gleichung AX=B für den Vektor X – der n Elemente hat –, wobei A eine Matrix der Größe mxn und B ein Vektor mit m Elementen ist.
Führen Sie Ihren Algorithmus auf Rescale aus
Nachdem Sie sich bei Rescale angemeldet haben, können Sie einen neuen Job erstellen, mit dem Sie Ihren PETSc-Algorithmus kompilieren und ausführen können.
Wählen Sie auf der Setup-Seite im Abschnitt „Analysecode“ die Option „PETSc“ aus. Wählen Sie in den Hardwareeinstellungen als Kerntyp „HPC+ mit 8 Kernen“ aus. Das folgende Bild zeigt, wie Ihr Bildschirm aussehen sollte.

Laden Sie auf der Workflow-Seite den Quellcode und das Makefile hoch. Alternativ können Sie auch die kompilierte ausführbare Binärdatei hochladen. Geben Sie im Analysebefehl den auszuführenden Befehl ein.
make; mpirun -n 8 ./ksp_test -n 1024 -m 1024 -logfile ksp_test_1024_1024_8.log
Die Workflow-Seite sollte wie folgt aussehen:
Klicken Sie unten rechts auf „Senden“, um Ihren Auftrag zum Neuskalieren auszuführen. Nach der Auftragsübermittlung können Sie den Auftrag auf der Statusseite in Echtzeit überwachen.
Wenn der Auftrag abgeschlossen ist, können Sie die Ausgabedateien und Protokolldateien auf der Seite „Ergebnisse“ anzeigen und herunterladen.
KSP-Testergebnisse
In meinem Skalierbarkeitstest habe ich 1, 2, 4, 8, 16 und 32 Kerne mit dem HPC+-Kerntyp von Rescale ausgewählt. Die Größe der Matrix A betrug 1024 x 1024. Hier sind die Ergebnisse der durchschnittlichen Prozessausführungszeit, der Anzahl der Iterationen und der Zeit pro Iteration.
Anhand der durchschnittlichen Prozessausführungszeit lässt sich erkennen, dass sich die Zeit mit zunehmender Anzahl der Kerne verringerte – bis 16 Kerne – und dann bei 32 Kernen unerwartet anstieg. Dies geschah, weil ich die Anzahl der Iterationen berücksichtigen musste.
Bei jedem Start des Algorithmus wurden die Matrix und der rechte Vektor zufällig generiert. Dies bedeutete, dass die zur Konvergenz zur „Fehlernorm“ erforderlichen Iterationen jedes Mal unterschiedlich waren. In der folgenden Grafik sehen wir die Anzahl der Iterationen für jeden Durchlauf unseres Tests.
Das letzte Diagramm zeigt die Anzahl der Iterationen pro Sekunde, berechnet aus der Anzahl der Iterationen / der durchschnittlichen Prozessausführungszeit. Aus den Diagrammen können wir erkennen, dass paralleles KSP mit zunehmender Anzahl von Kernen gut skaliert.
Wenn Sie ein Rescale-Konto haben, können Sie auf HIER KLICKEN um den erwähnten KSP-Testjob zu klonen und die Simulation mit unterschiedlichen Hardwareeinstellungen, Kernanzahl und Parametern auszuführen. Sie können auch auf HIER KLICKEN um einen „PETSc helloworld“-Beispieljob zu klonen. Wenn Sie kein Konto haben, klicken Sie bitte auf HIER KLICKEN sich anmelden.