org.apfloat.samples
Class PiParallel.ParallelPiCalculator

java.lang.Object
  extended byorg.apfloat.samples.Pi.ChudnovskyPiCalculator
      extended byorg.apfloat.samples.PiParallel.ParallelPiCalculator
All Implemented Interfaces:
Operation, Serializable
Direct Known Subclasses:
PiDistributed.DistributedPiCalculator
Enclosing class:
PiParallel

protected static class PiParallel.ParallelPiCalculator
extends Pi.ChudnovskyPiCalculator

Parallel version of the Chudnovskys' binary splitting algorithm. Uses multiple threads to calculate pi in parallel.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.apfloat.samples.Pi.ChudnovskyPiCalculator
precision, radix
 
Constructor Summary
PiParallel.ParallelPiCalculator(long precision, int radix)
          Construct a parallel pi calculator with the specified precision and radix.
 
Method Summary
 Object execute()
          Calculate pi using the Chudnovskys' binary splitting algorithm.
protected  OperationExecutor[] getNodes()
          Get the available set of operation executor nodes.
protected  void r(long n1, long n2, ApfloatHolder T, ApfloatHolder Q, ApfloatHolder P, ApfloatHolder F, OperationExecutor[] nodes, Pi.ChudnovskyProgressIndicator progressIndicator)
          Entry point for the parallel binary splitting algorithm.
protected  OperationExecutor[] recombineNodes(OperationExecutor[] nodes, int numberNeeded)
          Attempt to combine or split nodes to form the needed number of nodes.
 
Methods inherited from class org.apfloat.samples.Pi.ChudnovskyPiCalculator
r
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PiParallel.ParallelPiCalculator

public PiParallel.ParallelPiCalculator(long precision,
                                       int radix)
Construct a parallel pi calculator with the specified precision and radix.

Parameters:
precision - The target precision.
radix - The radix to be used.
Method Detail

r

protected void r(long n1,
                 long n2,
                 ApfloatHolder T,
                 ApfloatHolder Q,
                 ApfloatHolder P,
                 ApfloatHolder F,
                 OperationExecutor[] nodes,
                 Pi.ChudnovskyProgressIndicator progressIndicator)
          throws ApfloatRuntimeException
Entry point for the parallel binary splitting algorithm.

Parameters:
n1 - Start term.
n2 - End term.
T - Algorithm parameter.
Q - Algorithm parameter.
P - Algorithm parameter.
F - Pointer to inverse square root parameter.
nodes - The operation executors to be used for the calculation.
progressIndicator - Class to print out the progress of the calculation.
Throws:
ApfloatRuntimeException

getNodes

protected OperationExecutor[] getNodes()
Get the available set of operation executor nodes. This implementation returns LocalOperationExecutors but subclasses may return other operation executors.

Returns:
The set of available operation executors.

recombineNodes

protected OperationExecutor[] recombineNodes(OperationExecutor[] nodes,
                                             int numberNeeded)
Attempt to combine or split nodes to form the needed number of nodes. The returned number of nodes is something between the number of nodes input and the number of nodes requested. The requested number of nodes can be less than or greater than the number of input nodes.

Parameters:
nodes - The operation executors to recombine.
numberNeeded - The requested number of operation executors.
Returns:
The set of recombined operation executors.

execute

public Object execute()
Calculate pi using the Chudnovskys' binary splitting algorithm.

Specified by:
execute in interface Operation
Overrides:
execute in class Pi.ChudnovskyPiCalculator