Charm++ is a mature, highly scalable parallel programming system, and is an alternative to current shared and distributed methods. Though written in a C++ skeleton, it is compatible with Fortran, C, and C++. Code written in MPI can call Charm++, and Charm++ can call MPI, OpenMP, CUDA, and more.
Charm++ helps creators of compute intensive software deliver better shared and distributed memory parallel application performance, and improves overall throughput and reduces development and maintenance effort by enabling object oriented methods, dynamic load balancing, and fault tolerance with high level C++ style programming.
The problem is broken down into logical units, which are automatically mapped to processors.
Load imbalance arises in many HPC applications, and also occurs on mixed-hardware clusters. Rather than make every program solve this on its own, Charm++ provides automatic load balancing for all applications.
Automatic Communication & Computation Overlap
Charm++ exploits logical decomposition to enable dynamic overlap of communication and computation as the application executes.
Checkpointing & Resilience
Applications written in Charm++ can automatically checkpoint and restart with no extra code or special OS support. They can also run through node failures!
Charm++ can adapt execution to limit power consumption, reduce hotspots to improve reliability, and conserve energy to reduce cluster TCO.
Projections: an extensive suite for understanding the performance of your applications.
LiveViz: get live visualization data from any application.
CharmDebug: debug your Charm++ code interactively
Collision Detection: a highly scalable collision detection library written in Charm++.
Sorting: a highly efficient Charm++ library that can be used to sort billions of keys.