Base for most divide-and-conquer tasks used for computing ParallelArray operations. Rather than pure recursion, it links right-hand-sides and then joins up the tree, exploiting cases where tasks aren't stolen. This generates and joins tasks with a bit less overhead than pure recursive style -- there are only as many tasks as leaves (no strictly internal nodes). Split control relies on pap.getThreshold(), which is expected to err on the side of generating too many tasks. To counterbalance, if a task pops off its own smallest subtask, it directly runs its leaf action rather than possibly resplitting. There are, with a few exceptions, three flavors of each FJBase subclass, prefixed FJO (object reference), FJD (double) and FJL (long).
Constructor and description |
---|
PAS.FJBase
(AbstractParallelAnyArray pap, int lo, int hi, FJBase next) |
Type | Name and description |
---|---|
void |
atLeaf(int l, int h) Leaf computation |
void |
compute() |
void |
internalCompute(int l, int h, int g) |
FJBase |
newSubtask(int l, int h, FJBase r) Factory method to create new subtask, normally of current type |
void |
onReduce(FJBase right) Operation performed after joining right subtask -- default noop |
Methods inherited from class | Name |
---|---|
class java.util.concurrent.RecursiveAction |
java.util.concurrent.RecursiveAction#getRawResult(), java.util.concurrent.RecursiveAction#getRawResult(), java.util.concurrent.RecursiveAction#invoke(), java.util.concurrent.RecursiveAction#get(), java.util.concurrent.RecursiveAction#get(long, java.util.concurrent.TimeUnit), java.util.concurrent.RecursiveAction#join(), java.util.concurrent.RecursiveAction#getException(), java.util.concurrent.RecursiveAction#reinitialize(), java.util.concurrent.RecursiveAction#getPool(), java.util.concurrent.RecursiveAction#isCancelled(), java.util.concurrent.RecursiveAction#cancel(boolean), java.util.concurrent.RecursiveAction#invokeAll(java.util.concurrent.ForkJoinTask, java.util.concurrent.ForkJoinTask), java.util.concurrent.RecursiveAction#invokeAll([Ljava.util.concurrent.ForkJoinTask;), java.util.concurrent.RecursiveAction#invokeAll(java.util.Collection), java.util.concurrent.RecursiveAction#complete(java.lang.Object), java.util.concurrent.RecursiveAction#isDone(), java.util.concurrent.RecursiveAction#getQueuedTaskCount(), java.util.concurrent.RecursiveAction#getSurplusQueuedTaskCount(), java.util.concurrent.RecursiveAction#quietlyJoin(), java.util.concurrent.RecursiveAction#adapt(java.lang.Runnable, java.lang.Object), java.util.concurrent.RecursiveAction#adapt(java.lang.Runnable), java.util.concurrent.RecursiveAction#adapt(java.util.concurrent.Callable), java.util.concurrent.RecursiveAction#compareAndSetForkJoinTaskTag(short, short), java.util.concurrent.RecursiveAction#completeExceptionally(java.lang.Throwable), java.util.concurrent.RecursiveAction#getForkJoinTaskTag(), java.util.concurrent.RecursiveAction#helpQuiesce(), java.util.concurrent.RecursiveAction#inForkJoinPool(), java.util.concurrent.RecursiveAction#isCompletedAbnormally(), java.util.concurrent.RecursiveAction#isCompletedNormally(), java.util.concurrent.RecursiveAction#quietlyComplete(), java.util.concurrent.RecursiveAction#quietlyInvoke(), java.util.concurrent.RecursiveAction#setForkJoinTaskTag(short), java.util.concurrent.RecursiveAction#tryUnfork(), java.util.concurrent.RecursiveAction#fork(), java.util.concurrent.RecursiveAction#wait(), java.util.concurrent.RecursiveAction#wait(long, int), java.util.concurrent.RecursiveAction#wait(long), java.util.concurrent.RecursiveAction#equals(java.lang.Object), java.util.concurrent.RecursiveAction#toString(), java.util.concurrent.RecursiveAction#hashCode(), java.util.concurrent.RecursiveAction#getClass(), java.util.concurrent.RecursiveAction#notify(), java.util.concurrent.RecursiveAction#notifyAll() |
class java.util.concurrent.ForkJoinTask |
java.util.concurrent.ForkJoinTask#invoke(), java.util.concurrent.ForkJoinTask#get(), java.util.concurrent.ForkJoinTask#get(long, java.util.concurrent.TimeUnit), java.util.concurrent.ForkJoinTask#join(), java.util.concurrent.ForkJoinTask#getException(), java.util.concurrent.ForkJoinTask#reinitialize(), java.util.concurrent.ForkJoinTask#getPool(), java.util.concurrent.ForkJoinTask#isCancelled(), java.util.concurrent.ForkJoinTask#cancel(boolean), java.util.concurrent.ForkJoinTask#invokeAll(java.util.concurrent.ForkJoinTask, java.util.concurrent.ForkJoinTask), java.util.concurrent.ForkJoinTask#invokeAll([Ljava.util.concurrent.ForkJoinTask;), java.util.concurrent.ForkJoinTask#invokeAll(java.util.Collection), java.util.concurrent.ForkJoinTask#complete(java.lang.Object), java.util.concurrent.ForkJoinTask#isDone(), java.util.concurrent.ForkJoinTask#getQueuedTaskCount(), java.util.concurrent.ForkJoinTask#getSurplusQueuedTaskCount(), java.util.concurrent.ForkJoinTask#quietlyJoin(), java.util.concurrent.ForkJoinTask#adapt(java.lang.Runnable, java.lang.Object), java.util.concurrent.ForkJoinTask#adapt(java.lang.Runnable), java.util.concurrent.ForkJoinTask#adapt(java.util.concurrent.Callable), java.util.concurrent.ForkJoinTask#compareAndSetForkJoinTaskTag(short, short), java.util.concurrent.ForkJoinTask#completeExceptionally(java.lang.Throwable), java.util.concurrent.ForkJoinTask#getForkJoinTaskTag(), java.util.concurrent.ForkJoinTask#getRawResult(), java.util.concurrent.ForkJoinTask#helpQuiesce(), java.util.concurrent.ForkJoinTask#inForkJoinPool(), java.util.concurrent.ForkJoinTask#isCompletedAbnormally(), java.util.concurrent.ForkJoinTask#isCompletedNormally(), java.util.concurrent.ForkJoinTask#quietlyComplete(), java.util.concurrent.ForkJoinTask#quietlyInvoke(), java.util.concurrent.ForkJoinTask#setForkJoinTaskTag(short), java.util.concurrent.ForkJoinTask#tryUnfork(), java.util.concurrent.ForkJoinTask#fork(), java.util.concurrent.ForkJoinTask#wait(), java.util.concurrent.ForkJoinTask#wait(long, int), java.util.concurrent.ForkJoinTask#wait(long), java.util.concurrent.ForkJoinTask#equals(java.lang.Object), java.util.concurrent.ForkJoinTask#toString(), java.util.concurrent.ForkJoinTask#hashCode(), java.util.concurrent.ForkJoinTask#getClass(), java.util.concurrent.ForkJoinTask#notify(), java.util.concurrent.ForkJoinTask#notifyAll() |
Leaf computation
Factory method to create new subtask, normally of current type
Operation performed after joining right subtask -- default noop
Copyright © 2008–2014 Václav Pech. All Rights Reserved.