Charm++ is a parallel object-oriented programming language based on C++ and developed in the Parallel Programming Laboratory at the University of Illinois Charm++ is designed with the goal of enhancing programmer productivity by providing a high-level abstraction of a parallel program while at the same time delivering good performance on a wide variety of underlying hardware platforms Programs written in Charm++ are decomposed into a number of cooperating message-driven objects called chares When a programmer invokes a method on an object, the Charm++ runtime system sends a message to the invoked object, which may reside on the local processor or on a remote processor in a parallel computation This message triggers the execution of code within the chare to handle the message asynchronously

Chares may be organized into indexed collections called chare arrays and messages may be sent to individual chares within a chare array or to the entire chare array simultaneously

The chares in a program are mapped to physical processors by an adaptive runtime system The mapping of chares to processors is transparent to the programmer, and this transparency permits the runtime system to dynamically change the assignment of chares to processors during program execution to support capabilities such as measurement-based load balancing, fault tolerance, automatic checkpointing, and the ability to shrink and expand the set of processors used by a parallel program

The molecular dynamics simulation packages NAMD and OpenAtom are implemented using Charm++

Adaptive MPI AMPI1 is an implementation of the Message Passing Interface standard on top of the Charm++ runtime system and provides the capabilities of Charm++ in a more traditional MPI programming model AMPI encapsulates each MPI process within a user-level migratable thread that is bound within a Charm++ object By embedding each thread with a chare, AMPI programs can automatically take advantage of the features of the Charm++ runtime system with little or no changes to the underlying MPI program


  • 1 History
  • 2 Example
  • 3 See also
  • 4 References
  • 5 External links


Charm++ was developed at the Parallel Programming Laboratory, University of Illinois, by Wennie Shu and Kevin Nomura working with Laxmikant Kale The second prototype was called Chare Kernel20 was written by Manish Gupta Charm30 had significant design changes and was developed by a team consisting of Attila Gürsoy, Balkrishna Ramkumar, Amitabh B Sinha, and Laxmikant Kale A new translator was written by Nimish Shah Sanjeev Krishnan made the Charm++ implementation Charm40 included Charm++ It was released in fall 1993 Charm45 was developed by Attila Gürsoy, Sanjeev Krishnan, Milind Bhandarkar, Joshua Yelon, Narain Jagathesan, and Laxmikant Kale The same team also developed Charm48 that included Converse, a parallel runtime system that allows interoperability among modules that were written using different paradigms within a single application After that, the Charm++ runtime system was re-targeted at Converse Syntactic extensions in Charm++ were dropped, and a simple interface translator was developed by Sanjeev Krishnan and Jay DeSouza, which became the Charm++ language The version is 58 Revision 1 includes

  1. completely rewritten runtime system and the interface translator done by Milind Bhandarkar
  2. several new features such as Chare Arrays developed by Robert Brunner and Orion Lawlor, and
  3. various libraries written by Terry Wilmarth, Gengbin Zheng, Laxmikant Kale, Zehra Sura, Milind Bhandarkar, Robert Brunner, and Krishnan Varadarajan

After that, a coordination language “Structured Dagger” has been implemented on top of Charm++ by Milind Bhandarkar that was included in this version Several features have also been added to Converse Dynamic seed-based load balancing has been implemented Terry Wilmarth and Joshua Yelon, a client-server interface for Converse programs, and debugging support has been added Parthasarathy Ramachandran, Jeff Wright, and Milind Bhandarkar Converse has been ported to platforms including ASCI Red Joshua Yelon, Cray T3E Robert Brunner, and SGI Origin2000 Milind Bhandarkar There exists also a test suite for Charm++ developed by Michael Lang, Jackie Wang, and Fang Hu Projections, the performance visualization and analysis tool, was redesigned and rewritten using Java by Michael Denardo Orion Lawlor, Gengbin Zheng, and Milind Bhandarkar are responsible for changes to the system since the last release2


Here is some Charm++ code for demonstration purposes:3

Header file helloh #ifndef __HELLO_H__ #define __HELLO_H__ class Hello : public CBase_Hello ; #endif //__HELLO_H__ Interface file helloci module hello ; ; Source file helloC #include "hellodeclh" #include "helloh" #include "maindeclh" extern / readonly / CProxy_Main mainProxy; extern / readonly / int numElements; Hello::Hello // Constructor needed for chare object migration ignore for now // NOTE: This constructor does not need to appear in the "ci" file Hello::HelloCkMigrateMessage msg void Hello ::sayHiint from #include "hellodefh"

See alsoedit

  • NAMD
  • ChaNGa
  • Chapel
  • OpenAtom
  • RaftLib


  1. ^ 1
  2. ^ "Charm++ Programming Language Manual" PDF http://csillinoisedu/: University of Illinois at Urbana-Champaign, Department of Computer Science Retrieved 2011-08-12 
  3. ^ "Array "Hello World": A Slightly More Advanced "Hello World" Program: Array "Hello World" Code" http://charmcsuiucedu/: PPL - UIUC PARALLEL PROGRAMMING LABORATORY Retrieved 2011-08-12 
  • The Charm Parallel Programming Language and System: Part I -- Description of Language Features, pdf file
  • The Charm Parallel Programming Language and System: Part II -- The Runtime System, pdf file

External linksedit

  • The Parallel Programming Laboratory PPL at UIUC

Charm++ Information about



Charm++ Information Video

Charm++ viewing the topic.
Charm++ what, Charm++ who, Charm++ explanation

There are excerpts from wikipedia on this article and video

Random Posts

Social Accounts

Facebook Twitter VK
Copyright © 2014. Search Engine