Next: Reduction
Up: Extending the Standard Template
Previous: Future Implementations
In our future based environment, data parallel objects are schedulable
objects not restricted to SPMD programming. Further,
multiple
data parallel computations can interleave. These data parallel objects
can be thought of as future objects
used to schedule data parallel operations where each thread
operates on a different piece of data. The future resolution is a
reduction of the values returned by each of the parallel functions.
Just as the underlying control parallel
component in Coir<Futures> is a thread, the underlying data parallel
component is a rope or a group of threads. Rope objects define
functional data parallelism and synchronization among threads. A
global rope is defined from the main threads of all the processors
participating in a parallel program. The following are some of the functions
provided by the base Rope class:
- static Rope& SelfRope() - identify the currently executing rope
- int Size() const - number of threads in a rope
- int SelfIndex() const - index of the currently executing thread
in its rope
- int Index(const Thread& thr) const - index of the thread 'thr' in the
rope
- Thread& operator[](const int index) const - the 'index'th thread in
the rope.
- Reduction& ReductionObj() const - the reduction operation skeleton in
the rope (see below for description.)
Derived rope classes can be templatized on type signatures of the
the data-parallel tasks they would execute. Coir<Futures> defines UnaryRope and
BinaryRope derived template classes where the template
parameters specify that the tasks are represented by unary and binary
function object types, respectively.
Sundaresan Neelakantan
Thu May 15 16:11:49 PDT 1997