Overview

Overview

A Multipol program runs on a fixed number of processors. Each processor would execute the same code image (assuming the same processor and compiler). The program executed on each processor is decomposed into multiple long-lived threads for latency hiding. The threads access disitributed data structures that are physically partitioned among the processors. The accesses are made through a well-defined set of operations exported by the data structure. When a long-lived thread must wait for the result of an operation, it suspends itself so that another thread can be scheduled for execution. Otherwise, it continues execution as if the operation is a normal function call. Such operations are called split-phase operations. Split-phase operations synchronize with their callers using the counter data structure. The caller creates a continuation thread which wait for the counter to reach a certain value. The split-phase operation increments the counter upon completion.

Each long-lived thread is a sequence of of atomic threads (or simply threads for brevity). Each thread has a context, which stores the thread arguments and some of its local variables. The context may be shared among all atomic threads of a long-lived thread. Suspension of long-lived threads and their context savings are explicitly managed by the user in Multipol. Multipol does not require any machine dependent thread package for state saving and stack management.

Each atomic thread is the only mutator of its data structures during its execution. Atomicity makes it easier to write simple read-modify-write operations, which are quite common for distributed data structures. To maintain atomicity, the threads must guarantee to finish execution in finite time, and thus they cannot spin. The runtime system schedules the threads using customized schedulers supplied by the programmer. All customized schedulers are invoked by the runtime system periodically to ensure progress. The atomicity of thread execution, and the decoupling of scheduling decisions from the computation, makes it easy to compose data structures in Multipol programs.

The runtime system also support SPMD data structures and applications. Such programs must periodically poll the runtime system to ensure progress of all data structures (including those that are multi-threaded).

Uses

DistObj.



Chih-Po Wen
Wed Sep 13 23:59:20 PDT 1995