Programming Model

Object-based program design

  • Express algorithms and program designs using objects
  • Decompose computation into interacting object collections
  • Write native C++ code
  • Use all C++ capabilities (OO, generics etc)

Globally addressible objects

  • Some classes are elevated into global visibility
  • Objects of these classes can be addressed from any processor
  • Parallel control flow primarily involves these globally visible objects

Globally invocable methods

  • Some methods of globally visible classes are also elevated into global visibility
  • Only these methods of a globally visible object can be invoked from any processor

Asynchronous methods

  • Objects in computation interact using method invocations
  • Do not return any data
  • Method invocation does not block
  • No promise of immediate execution

Object collections

  • Collections of objects of a given type can be created, managed and addressed collectively
  • Collections are indexed
  • Each object in collection is globally visible. can be addressed via the tuple of collection handle and object index.
  • Method invocations on such collections are implicit broadcasts to all objects
Figure: User view and system view in Charm++

Object placement

  • Easily control placement of objects on processors

Migratable / serializable objects

  • Objects can be migrated
  • Any data in program can be migrated
  • Simply needs a serialization function

Decompose data across object collection

  • Typical data decomposition is by decomposing the data across multiple objects of a single class
  • Massively parallel computations on each portion of the data can be performed by simply invoking methods on the whole collection

Decompose data manipulation across methods

Easily task parallelism