parallel programming framework

  • migratable objects

    Use our unified data / task parallel model. Express parallelism in terms of interacting collections of objects. Use work and data units natural to your app. Don't shackle performance by explicitly managing cores / threads.

  • asynchronous methods

    Communication is as simple as invoking methods on remote objects. Get zero-effort overlap of your computation with your communication. Define your own serializable data or message types.

  • adaptive runtime system

    Allow our intelligent runtime system to orchestrate execution. You design and decompose the parallel algorithm; the runtime observes and optimizes performance. Win-Win!

  • more...

Charm++ Workshop 2024 Announcement

We will be having the 21st Annual Workshop on Charm++ and its applications at UIUC on Thursday April 25th and Friday April 26th 2024. For more information and for registration, please follow this link.

Hybrid Tutorial 2023 Announcement

We will be having a hybrid tutorial at UIUC on Monday October 23rd and Tuesday October 24th. For more information and for registration, please follow this link.


  • Automatic overlap
  • Automatic load balancing
  • Automatic checkpointing
  • Automatic fault tolerance
  • Portable code
  • Independent modules, interleaved execution
  • Interoperable with MPI and OpenMP
  • Ecosystem of tools

Charm++ is a parallel programming framework in C++ supported by an adaptive runtime system, which enhances user productivity and allows programs to run portably from small multicore computers (your laptop) to the largest supercomputers.

It enables users to easily expose and express much of the parallelism in their algorithms while automating many of the requirements for high performance and scalability. It permits writing parallel programs in units that are natural to the domain, without having to deal with processors and threads.

Charm++ has been in production use for over 15 years in the scientific and high performance computing communities and currently has thousands of users in dozens of countries across a wide variety of computing disciplines. It has been adopted by many computing teams, and has been used to produce several large parallel applications. It is actively developed, maintained, and supported by the Parallel Programming Laboratory at UIUC and its collaborators.

  • environments

    • x86 (workstations, laptops, etc.)
    • ARM7/8
    • Cray XC30/40, XE6, XK6/7
    • IBM BlueGene Q
    • IBM POWER8/9
    • Beowulf clusters
    • Linux, Mac, Windows
  • network interfaces

    • TCP, UDP
    • Infiniband verbs
    • MPI
    • OFI
    • PAMI (IBM BlueGene Q and POWER)
    • uGNI (Cray Gemini and Aries)
    • Shared Memory
  • compilers

    • clang
    • cray
    • fujitsu
    • gcc
    • ibm
    • intel
    • microsoft
    • portland group