top of page


Automated scaling and load balancing for high-impact

parallel programming

If you’re not aggressively scaling your code, you’re leaving opportunity on the table. These days, 85 percent of computational simulations would benefit from parallel computing, but only about 35 percent work across multiple nodes. Even simulations that already run in parallel often lose more than 50 percent of their performance due to load balancing issues. Whether you use a supercomputer or a small cluster, scaling is a big, time-consuming challenge. 

Charm++ changes that. It lets you automatically expand your code across more processors efficiently and effectively so you get faster, higher-resolution insights. Charm++’s runtime system decomposes computational simulations into smaller chunks, distributes those chunks across processors, and dynamically balances the computational load throughout the run.

Charm++ makes scaling easier, quicker, and less expensive. It delivers:​


Processor virtualization. Breaking the problem down into logical units and automatically mapping those units to processors.


Load balancing. Continuously redistributing tasks over available processors.


Communication and computation overlap. Tuning operations to overlap communication.


Automated checkpointing. Improving your code’s resilience.


Asynchronous execution. Minimizing idle time by executing work when its required data is available.


Power optimization. Supporting reduced energy consumption when you want it.


Molecular Dynamics

Crowd of People
Crab Nebula

Astrophysics & Cosmology


Engineering Sketch

Computational Engineering

Application Oriented

We have built Charm++ in close cooperation with application developers all over the world. The runtime system has been used to program some of the most successful applications in high-performance computing, including the largest COVID-19 simulation ever completed. We understand developers needs, and we’re ready to work with you. Contact us today!

What is Charm++?

Charm++ is not a new programming language. If you can code in C++, you can take advantage of Charm++ and learn it quickly. Interfaces for C and Fortran are also available. All you’ll need a few additional files to describe objects of interest to the Charm++ runtime system. Simply put, the programming model and the execution model provide many levers for our smart runtime system to optimize execution as the program runs. Charm++ uses continuous introspection and these levers to carry out a variety of tasks that would normally require complex, application-specific programming.


This brief introduction will walk you through how Charm++ works. If you’re ready to learn more, contact us today for a demo.


A Charm++ program specifies a parallel computation that consists of a number of globally visible interacting objects, called chares. Chares interact via asynchronous method invocations. This simply means that when you invoke a method in a particular chare object, you don’t (normally) get a return value. The call immediately returns, and the system simply sends the invocation towards the object, which will execute it eventually.   

bottom of page