A simulation in POSE consists of a set of CHARM++ chares performing timestamped events in parallel. In POSE, these chares are called posers. POSE is designed to work with many such entities per processor. The more a system can be broken down into its parallel components when designing the simulation model, the more potential parallelism in the final application.
A poser class is defined with a synchronization strategy associated with it. We encourage the use of the adaptive strategies, as mentioned earlier. Adaptive strategies are optimistic, and will potentially execute events out of order, but have rollback and cancellation messages as well as checkpointing abilities to deal with this behind the scenes.
Execution is driven by events. An event arrives for a poser and is
sorted into a queue by timestamp. The poser has a local time called
object virtual time (OVT) which represents its progress through the
simulation. When an event arrives with a timestamp
OVT, the OVT is
advanced to
. If the event has timestamp
OVT, it may be that
other events with greater timestamps were executed. If this is the
case, a rollback will occur. If not, the event is simply executed
along with the others in the queue.
Time can also pass on a poser within the course of executing an event. An elapse function is used to advance the OVT.
POSE maintains a global clock, the global virtual time (GVT), that represents the progress of the entire simulation.
Currently, POSE has no way to directly specify event dependencies, so if they exist, the programmer must handle errors in ordering carefully. POSE provides a delayed error message print and abort function that is only performed if there is no chance of rolling back the dependency error. Another mechanism provided by POSE is a method of tagging events with sequence numbers. This allows the user to determine the execution order of events which have the same timestamp.
February 12, 2012
POSE Homepage
Charm Homepage