Charm++ ICS 2013 Tutorial

The tutorial will present Charm++, a portable, C++-based parallel programming system, designed with programmer productivity as a major goal. Attendees will become familiar with the asynchronous, object-based programming model of Charm++ and the capabilities its adaptive runtime system offers.

Charm++ is a portable, mature environment that provides the foundation for several highly scalable and widely used applications in science and engineering. Charm++ runs on multicore desktops with shared memory, clusters of all sizes, and IBM and Cray supercomputers, and efficiently supports accelerators where available. The Parallel Programming Laboratory has developed and supported Charm++ and its predecessor systems for over 20 years. Its most widely-used application, the biomolecular simulation program NAMD, accounts for a large fraction of NSF supercomputer usage and won the Gordon Bell prize at SC 2002. It also won a Performance award in the 2011 HPC Challenge and reached Finalist status in the 2012 competition. Its adaptive features will be necessary to effectively use increasingly heterogeneous processors for the next-generation of applications supporting sophisticated techniques, such as multiple physics and adaptive refinement.

With Charm++, programmers decompose a computation into a large number of objects, without regard for the number of processors in a given machine. The runtime system assigns these objects to processors, naturally overlapping communication with computation and automating resource management. This flexibility enables optimization of characteristics like load balance and network topology-aware mapping independent of the application's core logic. Further, the runtime system supports multiple fault tolerance schemes, so applications can continue to run through component failures.

The tutorial will start by introducing attendees to message-driven parallel programming with examples presented in Charm++. After that, we will cover the basics of creating a parallel program in Charm++. Attendees will then learn how to enable load balancing through migratable objects and how to detect and treat load imbalance. The tutorial will conclude with a hands-on session in which attendees will construct a simple application, and an overview of the tools and advanced capabilities of the Charm++ ecosystem.

The target audience for this tutorial is programmers and researchers with some parallel programming experience and basic knowledge of C++.

Important Information: