jbarrier

edu.bonn.cs.net.jbarrier.barrier
Class ButterflyBarrier

java.lang.Object
  extended by edu.bonn.cs.net.jbarrier.barrier.AbstractBarrier
      extended by edu.bonn.cs.net.jbarrier.barrier.ButterflyBarrier
All Implemented Interfaces:
Barrier
Direct Known Subclasses:
DoubleButterflyReduction, FloatButterflyReduction, IntButterflyReduction, LongButterflyReduction

public class ButterflyBarrier
extends AbstractBarrier

Implementation of a butterfly barrier algorithm. The butterfly barrier was introduced in the following article:

E. D. Brooks III. "The Butterfly Barrier". In International Journal of Parallel Programming, volume 15, pages 295-307, 1986.

A good introduction to different barrier synchronization algorithms an be found in the following technical report:

C. Ball and M. Bull. "Barrier Synchronisation in Java".

At the time of writing the report is available online at www.ukhec.ac.uk/publications/reports/synch_java.pdf

Version:
1.0
Author:
Patrick Peschlow, Ivan Castilla Rodriguez

Nested Class Summary
protected  class ButterflyBarrier.ButterflyBarrierParty
          Stores data required by each party that uses the barrier.
 
Field Summary
protected  boolean flagOut_
          Global out flag (only used if there is a barrier action).
protected  int numRounds_
          The number of rounds used for the barrier.
protected  ButterflyBarrier.ButterflyBarrierParty[] parties_
          The barrier information associated to each competitor thread.
 
Fields inherited from class edu.bonn.cs.net.jbarrier.barrier.AbstractBarrier
action_, genericReductor_, numParties_
 
Constructor Summary
ButterflyBarrier(int numParties)
          Constructor (if no action is used).
ButterflyBarrier(int numParties, java.lang.Runnable action)
          Constructor.
ButterflyBarrier(int numParties, java.lang.Runnable barrierAction, GenericReductor genericReductor)
          Constructor.
 
Method Summary
 void await(int threadId)
          Called by a party that reaches the barrier.
protected  void setUpParties()
          Sets up the parties array, intended to be overridden in subclasses.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

numRounds_

protected final int numRounds_
The number of rounds used for the barrier.


parties_

protected ButterflyBarrier.ButterflyBarrierParty[] parties_
The barrier information associated to each competitor thread.


flagOut_

protected volatile boolean flagOut_
Global out flag (only used if there is a barrier action).

Constructor Detail

ButterflyBarrier

public ButterflyBarrier(int numParties,
                        java.lang.Runnable barrierAction,
                        GenericReductor genericReductor)
Constructor.

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
barrierAction - the command to execute when the barrier is tripped, or null if there is no action
genericReductor - an optional generic reductor
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two

ButterflyBarrier

public ButterflyBarrier(int numParties,
                        java.lang.Runnable action)
Constructor.

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
action - the command to execute when the barrier is tripped, or null if there is no action
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two

ButterflyBarrier

public ButterflyBarrier(int numParties)
Constructor (if no action is used).

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two
Method Detail

setUpParties

protected void setUpParties()
Sets up the parties array, intended to be overridden in subclasses.


await

public void await(int threadId)
Called by a party that reaches the barrier.

Specified by:
await in interface Barrier
Specified by:
await in class AbstractBarrier
Parameters:
threadId - the ID of the party

jbarrier

Copyright 2010 Patrick Peschlow