
| ||
The Multiphase Shared Arrays (MSA) library provides a partitioned global address space (PGAS) abstraction in Charm++. Explicitly shared arrays provide the convenience of shared memory programming where suitable, while exposing optimization opportunities to programmers, compilers, and the Adaptive Runtime System. An MSA program computation consists of a set of user-level migratable threads, each embeded in a Charm++ object (i.e. a chare). In addition, it includes a collection of shared arrays (MSAs), each partitioned into blocks, under user control. User specifies the blocking (typically, overdecomposed) but not which block goes to which processor. Each block is therefore a chare that can be migrated, say for load balancing, by the Charm++ RTS. Each MSA is accessed in one specific mode during each phase of execution: read-only mode, in which any thread can read any element of the array; write-once mode, in which each element of the array is written to (possibly multiple times) by at most one worker thread and no reads are allowed; accumulate mode, in which any threads can add values to any array element, and no reads or writes are permitted; and owner-computes mode, where a specified function is performed on each distributed block of the array by a processor on its home node. A synchronization call is used to move from one phase to the next. MSA distributes data in blocks whose dimensions are specified by
the programmer. The assignment of blocks to processors, and subsequent
load balancing, can be controlled by the same mechanisms the Charm++
runtime provides for any Chare array. The runtime automatically
manages fetching and caching of remote data, though the programmer or
compiler may make (blocking or non-blocking) prefetch calls as an
optimization if the access pattern is predictable.
| ||
| Software | ||
| Distributed with Charm++. | ||
| People | ||
| Papers | ||
| ||
| Related Links | ||
|