TerminationDetection¶
Usage
use TerminationDetection;
In termination detection, each time a task spawns another task, the spawning task becomes the parent and the spawned task is the child. The parent must increment the ‘tasksStarted’ counter each time it creates a child, and the child must increment the ‘tasksFinished’ counter before being destroyed. Each locale has its own privatized counters, so if the parent and child are not located on the same locale, the increment and decrement occur on the respective locales counters, hence a locale can have a ‘tasksStarted’ counter that is higher or lower than the ‘tasksFinished’ counter, even if all tasks have terminated. The benefit to having increments being local is the increased locality.
Determining whether or not all tasks have terminated involves performing multiple distributed reductions, which Chapel makes very easy. Spawning a remote task on each node, and using the reduce intent is enough to implement a distributed reduction. Once the reduction has been performed twice, and if there has been no update, and if both times the reduction of both the ‘tasksStarted’ and ‘tasksFinished’ are equivalent, no task is alive at that given time.
Example of its usage:
proc visit(n : node, term : TerminationDetection) {
doSomethingTo(n.data);
// About to spawn two tasks...
term.start(2);
begin on n.left {
visit(n.left, term);
}
begin on n.right {
visit(n.right, term);
}
// Task just finished...
term.finish();
}
-
record
TerminationDetector
¶ Termination detector.
-
var
instance
: unmanaged TerminationDetectorImpl¶
-
var
pid
= -1¶
-
proc
init
(n = 0)¶
-
proc
_value
¶
-
proc
destroy
()¶
-
var
-
proc
<=>
(ref lhs: TerminationDetector, ref rhs: TerminationDetector)¶
-
class
TerminationDetectorImpl
¶ -
var
tasksStarted
: chpl__processorAtomicType(int)¶
-
var
tasksFinished
: chpl__processorAtomicType(int)¶
-
var
pid
= -1¶
-
proc
init
(n = 0)¶
-
proc
init
(other, pid)
-
proc
started
(n = 1)¶
-
proc
finished
(n = 1)¶
-
proc
getStatistics
(): (int, int)¶
-
proc
hasTerminated
(): bool¶
-
proc
awaitTermination
(minBackoff = 0, maxBackoff = 1024, multBackoff = 2)¶
-
proc
dsiPrivatize
(pid)¶
-
proc
dsiGetPrivatizeData
()¶
-
proc
getPrivatizedInstance
()¶
-
var