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 Params | Return 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 jsr166y.RecursiveAction |
jsr166y.RecursiveAction#getRawResult(), jsr166y.RecursiveAction#getRawResult(), jsr166y.RecursiveAction#invokeAll([Ljsr166y.ForkJoinTask;), jsr166y.RecursiveAction#invokeAll(java.util.Collection), jsr166y.RecursiveAction#invokeAll(jsr166y.ForkJoinTask, jsr166y.ForkJoinTask), jsr166y.RecursiveAction#cancel(boolean), jsr166y.RecursiveAction#isCancelled(), jsr166y.RecursiveAction#getSurplusQueuedTaskCount(), jsr166y.RecursiveAction#getQueuedTaskCount(), jsr166y.RecursiveAction#quietlyJoin(), jsr166y.RecursiveAction#isCompletedAbnormally(), jsr166y.RecursiveAction#isCompletedNormally(), jsr166y.RecursiveAction#quietlyInvoke(), jsr166y.RecursiveAction#helpQuiesce(), jsr166y.RecursiveAction#inForkJoinPool(), jsr166y.RecursiveAction#tryUnfork(), jsr166y.RecursiveAction#adapt(java.lang.Runnable, java.lang.Object), jsr166y.RecursiveAction#adapt(java.lang.Runnable), jsr166y.RecursiveAction#adapt(java.util.concurrent.Callable), jsr166y.RecursiveAction#invoke(), jsr166y.RecursiveAction#get(long, java.util.concurrent.TimeUnit), jsr166y.RecursiveAction#get(), jsr166y.RecursiveAction#join(), jsr166y.RecursiveAction#getException(), jsr166y.RecursiveAction#reinitialize(), jsr166y.RecursiveAction#complete(java.lang.Object), jsr166y.RecursiveAction#getPool(), jsr166y.RecursiveAction#isDone(), jsr166y.RecursiveAction#fork(), jsr166y.RecursiveAction#completeExceptionally(java.lang.Throwable), jsr166y.RecursiveAction#wait(long), jsr166y.RecursiveAction#wait(long, int), jsr166y.RecursiveAction#wait(), jsr166y.RecursiveAction#equals(java.lang.Object), jsr166y.RecursiveAction#toString(), jsr166y.RecursiveAction#hashCode(), jsr166y.RecursiveAction#getClass(), jsr166y.RecursiveAction#notify(), jsr166y.RecursiveAction#notifyAll() |
class jsr166y.ForkJoinTask |
jsr166y.ForkJoinTask#invokeAll([Ljsr166y.ForkJoinTask;), jsr166y.ForkJoinTask#invokeAll(java.util.Collection), jsr166y.ForkJoinTask#invokeAll(jsr166y.ForkJoinTask, jsr166y.ForkJoinTask), jsr166y.ForkJoinTask#cancel(boolean), jsr166y.ForkJoinTask#isCancelled(), jsr166y.ForkJoinTask#getSurplusQueuedTaskCount(), jsr166y.ForkJoinTask#getQueuedTaskCount(), jsr166y.ForkJoinTask#quietlyJoin(), jsr166y.ForkJoinTask#isCompletedAbnormally(), jsr166y.ForkJoinTask#isCompletedNormally(), jsr166y.ForkJoinTask#quietlyInvoke(), jsr166y.ForkJoinTask#helpQuiesce(), jsr166y.ForkJoinTask#inForkJoinPool(), jsr166y.ForkJoinTask#tryUnfork(), jsr166y.ForkJoinTask#getRawResult(), jsr166y.ForkJoinTask#adapt(java.lang.Runnable, java.lang.Object), jsr166y.ForkJoinTask#adapt(java.lang.Runnable), jsr166y.ForkJoinTask#adapt(java.util.concurrent.Callable), jsr166y.ForkJoinTask#invoke(), jsr166y.ForkJoinTask#get(long, java.util.concurrent.TimeUnit), jsr166y.ForkJoinTask#get(), jsr166y.ForkJoinTask#join(), jsr166y.ForkJoinTask#getException(), jsr166y.ForkJoinTask#reinitialize(), jsr166y.ForkJoinTask#complete(java.lang.Object), jsr166y.ForkJoinTask#getPool(), jsr166y.ForkJoinTask#isDone(), jsr166y.ForkJoinTask#fork(), jsr166y.ForkJoinTask#completeExceptionally(java.lang.Throwable), jsr166y.ForkJoinTask#wait(long), jsr166y.ForkJoinTask#wait(long, int), jsr166y.ForkJoinTask#wait(), jsr166y.ForkJoinTask#equals(java.lang.Object), jsr166y.ForkJoinTask#toString(), jsr166y.ForkJoinTask#hashCode(), jsr166y.ForkJoinTask#getClass(), jsr166y.ForkJoinTask#notify(), jsr166y.ForkJoinTask#notifyAll() |
Leaf computation
Factory method to create new subtask, normally of current type
Operation performed after joining right subtask -- default noop
Copyright © 2008–2013 Václav Pech. All Rights Reserved.