Charm++
| Tipus | llenguatge de programació |
|---|---|
| Disseny | Laxmikant Kale (en) |
| Desenvolupador | Parallel Programming Laboratory |
| Paradigma de programació | Message-driven parallel programming, migratable objects, Object-oriented, asynchronous many-tasking |
| Darrera versió estable | 7.0.0 () |
| Llenguatge de programació | C++ |
| Sistema operatiu | Linux, Microsoft Windows i macOS |
| Pàgina web | http://charmplusplus.org |
Charm++ és un paradigma de programació paral·lel orientat a objectes basat en C++ i desenvolupat al Parallel Programming Laboratory de la Universitat d'Illinois a Urbana–Champaign. Charm++ està dissenyat amb l'objectiu de millorar la productivitat del programador proporcionant una abstracció d'alt nivell d'un programa paral·lel alhora que ofereix un bon rendiment en una gran varietat de plataformes de maquinari subjacents. Els programes escrits en Charm++ es descomponen en una sèrie d'objectes cooperants basats en missatges anomenats chares. Quan un programador invoca un mètode en un objecte, el sistema d'execució Charm++ envia un missatge a l'objecte invocat, que pot residir en el processador local o en un processador remot en un càlcul paral·lel. Aquest missatge desencadena l'execució de codi dins del chare per gestionar el missatge de manera asíncrona.[1]
Els chares es poden organitzar en col·leccions indexades anomenades chare arrays i els missatges es poden enviar a chares individuals dins d'una matriu chare o a tota la matriu chare simultàniament.[2]
Els caràcters d'un programa s'assignen als processadors físics mitjançant un sistema d'execució adaptatiu. El mapeig de caràcters als processadors és transparent per al programador, i aquesta transparència permet que el sistema d'execució canviï dinàmicament l'assignació de caràcters als processadors durant l'execució del programa per donar suport a capacitats com ara l'equilibri de càrrega basat en mesures, la tolerància a errors, el punt de control automàtic i la capacitat de reduir i ampliar el conjunt de processadors utilitzats per un programa paral·lel.
Les aplicacions implementades amb Charm++ inclouen NAMD (dinàmica molecular) i OpenAtom (química quàntica), ChaNGa i spectre (astronomia), EpiSimdemics (epidemiologia) i Cello/Enzo-E (refinament de malla adaptativa). Totes aquestes aplicacions han escalat fins a cent mil nuclis o més en sistemes petascale.[3]
Adaptive MPI (AMPI) és una implementació de l'estàndard de la interfície de pas de missatges a la part superior del sistema d'execució Charm++ i proporciona les capacitats de Charm++ en un model de programació MPI més tradicional. AMPI encapsula cada procés MPI dins d'un fil migrable a nivell d'usuari que està lligat a un objecte Charm++. En incrustar cada fil en un chare, els programes AMPI poden aprofitar automàticament les característiques del sistema d'execució Charm++ amb pocs o cap canvi al programa MPI.
Charm4py permet escriure aplicacions Charm++ en Python, admet objectes Python migrables i invocació de mètodes remots asíncrons.
Exemple
[modifica]Un codi Charm++ amb finalitats de demostració:[4]
Fitxer de capçalera (hello.h )
class Hello : public CBase_Hello {
public:
Hello(); // C++ constructor
void sayHi(int from); // Remotely invocable "entry method"
};
Referències
[modifica]- ↑ «Charm++: Parallel Programming Framework» (en anglès). [Consulta: 16 març 2025].
- ↑ «2. The Charm++ Parallel Programming System — Charm++ documentation» (en anglès). [Consulta: 16 març 2025].
- ↑ Kale, Laxmikant V. «The Charm++ Parallel Programming System» (en anglès), 14-03-2025. [Consulta: 16 març 2025].
- ↑ «Array "Hello World": A Slightly More Advanced "Hello World" Program: Array "Hello World" Code» (en anglès). PPL - UIUC PARALLEL PROGRAMMING LABORATORY. [Consulta: 8 maig 2017].