Check out the new USENIX Web site. next up previous contents
Next: Reduction Up: Extending the Standard Template Previous: Future Implementations

Data Parallel Objects

  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:

  1. static Rope& SelfRope() - identify the currently executing rope
  2. int Size() const - number of threads in a rope
  3. int SelfIndex() const - index of the currently executing thread in its rope
  4. int Index(const Thread& thr) const - index of the thread 'thr' in the rope
  5. Thread& operator[](const int index) const - the 'index'th thread in the rope.
  6. 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