\section{Big Questions}

\subsubsection{What is Charm++?}

\htmladdnormallink{Charm++}{http://charm.cs.uiuc.edu/research/charm/}
is a runtime library to let C++ objects communicate with each other
efficiently.  The programming model is thus an asynchronous message
driven paradigm, like Java RMI, or RPC; but it is targeted towards
tightly coupled, high-performance parallel machines.  Unlike MPI's
``single program, multiple data'' (SPMD) programming and execution model, Charm++ programs do not proceed in lockstep.  The flow of control is determined by the order in which remote method invocations occur.  This can be controlled by the user through Structure Control Flow using  \htmladdnormallink{Structure Dagger}{http://charm.cs.illinois.edu/manuals/html/charm++/5.html}, or \htmladdnormallink{Charisma}{http://charm.cs.uiuc.edu/research/orch}, or compiler supported higher level languages \htmladdnormallink{Charj}{http://charm.cs.uiuc.edu/research/charj}

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

\subsubsection{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 { \em 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++ \htmladdnormallink{frameworks}{http://charm.cs.uiuc.edu/research/}.

\subsubsection{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, fault tolerance, power
awareness, and automatic overlap of communication with computation,
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
\htmladdnormallink{AMPI}{http://charm.cs.uiuc.edu/research/ampi/}.

\subsubsection{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
Power series and BlueGene (L/P/Q), Cray XT/XE/XK 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.

\subsubsection{Does anybody actually use Charm++?}

Yes.

The large, production-quality molecular dynamics application \htmladdnormallink{NAMD}{http://charm.cs.uiuc.edu/research/moldyn/}
is built on Charm++.\\
%The \htmladdnormallink{Center for Simulation of Advanced Rockets}{http://www.csar.uiuc.edu/}
%has a large physical simulation code built using Charm++.\\
We have significant collaborations with groups in Materials Science,
Chemistry, Astrophysics, Operation Research, Contagion Effects, in Illinios, New York, Washington, and Virginia.

\subsubsection{Who created Charm++?}

Prof. \htmladdnormallink{L.V. Kale}{mailto:kale@cs.uiuc.edu}, of the
\htmladdnormallink{Computer Science Department}{http://www.cs.uiuc.edu/}
of the \htmladdnormallink{University of Illinois at Urbana-Champaign}{http://www.uiuc.edu/},
and his research group, the \htmladdnormallink{Parallel Programming Lab}{http://charm.cs.uiuc.edu/">Parallel}.
Nearly a hundred people have contributed something
to the project over the course of aproximately 20 years; a partial list
of contributors appears in the \htmladdnormallink{people}{http://charm.cs.uiuc.edu/people/}'s page.

\subsubsection{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++ 
\htmladdnormallink{frameworks}{http://charm.cs.uiuc.edu/research/}.
Several other groups are dependent on Charm++, so we expect to continue
improving Charm++ indefinitely.

\subsubsection{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).

\subsubsection{I have a suggestion/feature request/bug report. Who should I send
it to?}

Our mailing list is \htmladdnormallink{charm AT
  cs.uiuc.edu}{mailto:charm AT cs.uiuc.edu}.
We're always glad to get feedback on our software.
