Charm++
# Charm++

Charm++ ist eine parallele objektorientierte Programmiersprache basierend auf C++ und wurde im Parallel Programming Laboratory der University of Illinois entwickelt (Hauptentwickler Laxmikant Kale). Charm++ wurde mit dem Ziel entwickelt, eine höhere Produktivität durch eine höhere Abstraktionsebene paralleler Programmierung und gleichzeitig gute Performanz auf vielen verschiedenen Hardware-Plattformen zu bieten. In Charm++ geschriebene Programme bestehen aus einer Anzahl an kooperierenden Nachrichten-gesteuerten Objekten, genannt Chares.

Chares können in sogenannten Chare Arrays organisiert werden. Nachrichten können simultan an einzelne Chares innerhalb eines Chare Arrays oder an das gesamte Chare Array gesendet werden.

Die Chares eines Programms werden von einem adaptiven Laufzeitsystem auf die physikalischen Prozessoren abgebildet. Das Mapping ist für den Programmierer transparent und erlaubt es dem Laufzeitsystem während der Programmausführung die Zuweisung der Chares an die Prozessoren dynamisch zu verändern, um beispielsweise Load Balancing oder Fehlertoleranz zu ermöglichen oder die Anzahl der vom Programm verwendeten Prozessoren zu vergrößern oder zu verringern.

Das Moleküldynamik-Simulationsprogramm NAMD wurde in Charm++ implementiert.

## Referenz

* The Charm Parallel Programming Language and System: Part I -- Description of Language Features
* The Charm Parallel Programming Language and System: Part II -- The Runtime System
