Subsections

1 Big Questions

1.0.1 What is Charm++?

Charm++ is a runtime library to let C++ objects communicate with each other efficiently. The programming model is thus very much like CORBA, Java RMI, or RPC; but it is targeted towards tightly coupled, high-performance parallel machines. It uses the ``single program, multiple data'' (SPMD) programming model made popular by MPI.

Charm++ has demonstrated scalability up to thousands of processors, and provides extremely advanced load balancing and object migration facilities.

1.0.2 Can Charm++ parallelize my serial program automatically?

No.

Charm++ is used to write ``explicitly parallel'' programs-we don't have our own compiler, so we don't do automatic parallelization. We've found automatic parallelization useful only for a small range of very regular numerical applications.

However, you should not have to throw away your serial code; normally only a small fraction of a large program needs to be changed to enable parallel execution. In particular, Charm++'s support for object-oriented programming and high-level abstractions such as Charm++ Arrays make it simpler and more expressive than many other parallel languages. So you will have to write some new code, but not as much as you might think. This is particularly true when using one of the Charm++ frameworks.

1.0.3 I can already write parallel applications in MPI. Why should I use Charm++?

Charm++ provides several extremely sophisticated features, such as application-independent object migration, that are very difficult to provide in MPI. If you have a working MPI code but have scalability problems because of dynamic behavior, load imbalance, or communication costs, Charm++ might dramatically improve your performance. You can even run your MPI code on Charm++ unchanged using AMPI.

1.0.4 Will Charm++ run on my machine?

Yes.

Charm++ supports both shared-memory and distributed-memory machines, SMPs and non-SMPs. In particular, we support serial machines, Windows machines, clusters connected via Ethernet, Myrinet or Infiniband, IBM SP series and BlueGene, Cray XT series, and any machine that supports MPI or SHMEM. We normally do our development on Linux workstations, and our testing on large parallel machines. Programs written using Charm++ will run on any supported machine.

No one has ported Charm++ to a vector supercomputer, but it should be possible.

1.0.5 Does anybody actually use Charm++?

Yes.

The large, production-quality molecular dynamics application NAMD is built on Charm++.
The Center for Simulation of Advanced Rockets has a large physical simulation code built using Charm++.
We have significant collaborations with groups in Materials Science, Chemistry, and Astrophysics in Illinios, New York, and Washington.

1.0.6 Who created Charm++?

Prof. L.V. Kale, of the Computer Science Department of the University of Illinois at Urbana-Champaign, and his research group, the Parallel Programming Lab. Nearly a hundred people have contributed something to the project over the course of aproximately 15 years; a partial list of contributors appears in the people's page.

1.0.7 What is the future of Charm++?

Our research group of approximately twenty people are actively engaged in maintaining and extending Charm++; and in particular the Charm++ frameworks. Several other groups are dependent on Charm++, so we expect to continue improving Charm++ indefinitely.

1.0.8 How is Charm++ Licensed?

Charm++ is open-source and free for research, educational, and academic use. The University of Illinois retains the copyright to the software, and requires a license for any commercial redistribution of our software. The actual, legal license is included with Charm++ (in charm/LICENSE).

1.0.9 I have a suggestion/feature request/bug report. Who should I send it to?

Our mailing list is ppl@cs.uiuc.edu and our Wiki is CharmWiki. We're always glad to get feedback on our software.

November 23, 2009
Charm Homepage