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 addressable 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
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