Charm++

Charm ++
Paradigma Nachrichtenbetrieben Parallele Programmierung, migratierbare Objekte, Objektorientierter, asynchrone Viele Aufgaben
Entworfen von Laxmikant Kale
Entwickler Parallele Programmierlabor
Erstmals erschienen Ende der 1980er Jahre
Stabile Version
7.0.0 / 25. Oktober 2021; vor 9 Monaten
Implementierungssprache C ++, Python
Plattform Cray Xc, Xk, Xe, IBM Blue Gene/Q., Infiniband, TCP, UDP, MPI, Ofi
OS Linux, Fenster, Mac OS
Webseite http://charmplusplus.org

Charm ++ ist eine Parallele Objekt orientierte Programmierung Paradigma basierend auf C ++ und im parallel Programmierlabor entwickelte Universität von Illinois in Urbana -Champaign. Charm ++ ist mit dem Ziel entwickelt, die Programmiererproduktivität durch eine hohe Abstraktion von a zu verbessern Parallelprogramm gleichzeitig eine gute Leistung auf einer Vielzahl von zugrunde liegenden Hardware -Plattformen liefern. Programme, die in Charm ++ geschrieben wurden Chares. Wenn ein Programmierer eine Methode auf ein Objekt aufruft, sendet das Charm ++ Runtime System eine Nachricht an das aufgerufene Objekt, das sich möglicherweise auf dem lokalen Prozessor oder einem Remote -Prozessor in einer parallelen Berechnung befindet. Diese Nachricht löst die Ausführung des Codes innerhalb des Chare aus, um die Nachricht asynchron zu verarbeiten.

Chares können in indizierte Sammlungen organisiert werden, die genannt werden Chare -Arrays und Nachrichten können innerhalb eines Chare -Arrays oder gleichzeitig an einzelne Zeichen innerhalb eines Chare -Arrays oder an das gesamte Chare -Array gesendet werden.

Die Chares in einem Programm werden von einem adaptiven Laufzeitsystem physischen Prozessoren zugeordnet. Die Zuordnung von Chares an Prozessoren ist für den Programmierer transparent, und diese Transparenz ermöglicht es dem Laufzeitsystem, die Zuordnung von Chares zu Prozessoren während der Programmausführung dynamisch zu ändern, um Funktionen wie messbasierte Lastausgleich, Fehlertoleranz, automatische Überprüfung und die Fähigkeit, die von einem parallelen Programm verwendeten Prozessoren zu verkleinern und zu erweitern.

Anwendungen, die mit Charm ++ implementiert sind Namd (molekulare Dynamik) und Openatom (Quantenchemie), Changa und Spectre (Astronomie), Epidemiologie (Epidemiologie), Cello/Enzo-P (adaptive Mesh-Verfeinerung) und Ross (parallel diskrete Ereignissimulation). Alle diese Anwendungen haben bis zu hunderttausend Kerne oder mehr auf Petascale -Systemen skaliert.

Adaptiver MPI (AMPI)[1] ist eine Implementierung der Schnittstelle zur Nachrichtenübergabe Standard über dem Charm ++ Laufzeitsystem und bietet die Funktionen von Charm ++ in einem herkömmlichen MPI -Programmiermodell. AMPI verkauft jeden MPI-Prozess in einem migratierbaren Thread auf Benutzerebene, der innerhalb eines Charm ++-Objekts gebunden ist. Durch Einbetten jedes Threads können AMPI -Programme automatisch die Funktionen des Charm ++ Runtime Systems mit geringen oder gar keine Änderungen am MPI -Programm nutzen.

Charm4py Ermöglicht das Schreiben von Charm ++ Anwendungen in Python, unterstützende migratierbare Python -Objekte und asynchrone Remote -Methodenaufruf.

Beispiel

Hier ist ein Charm ++ Code für Demonstrationszwecke:[2]

Header-Datei ( Hallo h)
Klasse Hallo : Öffentlichkeit Cbase_hello {  Öffentlichkeit:   Hallo(); // C ++ - Konstruktor   Leere Sag Hallo(int aus); // remote invocable "Eintragsmethode" }; 
Charm ++ - Schnittstellendatei ( hello.ci)
Modul hallo {   Array [1D] Hallo {   Eintrag Hallo();   Eintrag Leere Sag Hallo(int);   }; }; 
Quelldatei ( hello.cpp)
# enthalten "Hello.decl.h" # enthalten "Hallo h" extern CProxy_main Mainproxy; extern int Zahlen; Hallo::Hallo() {   // keine Mitgliedsvariablen zur Initialisierung in diesem einfachen Beispiel } Leere Hallo::Sag Hallo(int aus) {   // Lassen Sie dieses Chare -Objekt dem Benutzer Hallo sagen.   CKPrintf("Hallo aus Chare # %d auf Prozessor %d (erzählt von %d)\n",   thisindex, Ckmype(),, aus);   // Erzählen Sie das nächste Chare -Objekt in dieser Reihe von Chare -Objekten   // auch Hallo sagen. Wenn dies das letzte Chare -Objekt in ist   // die Auswahl der Chare -Objekte und dann den Hauptsch Chare mitteilen   // Objekt, das Programm zu beenden.   wenn (thisindex < (Zahlen - 1)) {   diese Proxy[thisindex + 1].Sag Hallo(thisindex);   } anders {   Mainproxy.erledigt();   } } # enthalten "Hello.def.h" 

Adaptiver MPI (AMPI)

Adaptive MPI ist eine Implementierung von MPI (wie MPich, OpenMPI, MVAPICH usw.) über dem Laufzeitsystem von Charm ++. Benutzer können bereits vorhandene MPI-Anwendungen annehmen, sie mithilfe von AMPI-Compiler-Wrappern neu kompilieren und mit der Prozessvirtualisierung, dem dynamischen Lastausgleich und der Fehlertoleranz experimentieren. AMPI implementiert MPI "Ränge" als Threads auf Benutzerebene (anstatt Betriebssystemprozesse). Diese Themen sind schnell zu Kontextwechsel und so können mehrere davon basierend auf der Verfügbarkeit von Nachrichten für sie auf demselben Kern zusammengefasst werden. AMPI -Ränge und alle Daten, die sie besitzen, sind auch zur Laufzeit migratierbar über die verschiedenen Kerne und Knoten eines Jobs. Dies ist nützlich für den Lastausgleich und für Checkpoint/Neustart-basierte Fehlertoleranzschemata. Weitere Informationen zu AMPI finden Sie im Handbuch: http://charm.cs.illinois.edu/manuals/html/ampi/manual.html

Charm4py

Charm4py[3] ist ein Python Parallel Computing -Framework, das oben auf der Charm ++ C ++ Runtime basiert und die als gemeinsame Bibliothek verwendet wird. CHARM4PY vereinfacht die Entwicklung von Charm ++ -Anwendungen und optimiert Teile des Programmiermodells. Beispielsweise müssen keine Schnittstellendateien (.ci -Dateien) oder SDAG verwendet werden, und es besteht keine Anforderung, Programme zu kompilieren. Benutzer können ihren Code auf Anwendungsebene mit Technologien wie immer noch frei beschleunigen Numba. Binärversionen standardmäßige fertige Versionen können unter Linux, macOS und Windows mit installiert werden Pip.

Es ist auch möglich, hybride Charm4Py- und MPI -Programme zu schreiben.[4] Ein Beispiel für ein unterstütztes Szenario ist ein Charm4Py -Programm, das MPI4Py -Bibliotheken für bestimmte Teile der Berechnung verwendet.

Siehe auch

Verweise

  1. ^ "Parallel Programmierlabor". charm.cs.illinois.edu. Abgerufen 2018-12-12.
  2. ^ "Array" Hello World ": Ein etwas fortgeschritteneres" Hello World "-Programm: Array" Hello World "Code". PPL - UIUC Parallele Programmierlabor. Abgerufen 2017-05-08.
  3. ^ "Charm4py - charm4py 1.0.0 dokumentation". charm4py.readthedocs.io. Abgerufen 2019-09-11.
  4. ^ "Ausführen von Hybrid -MPI4PY- und CHRIN4PY -Programmen (MPI Interop)". Charm ++ und Charm4Py Forum. 2018-11-30. Abgerufen 2018-12-11.

Externe Links