WorkQueue¶
Usage
use WorkQueue;
-
config const
workQueueMinTightSpinCount
= 8¶
-
config const
workQueueMaxTightSpinCount
= 1024¶
-
config const
workQueueMinVelocityForFlush
= 1¶
-
config const
workQueueMinEligibleForSteal
= 1024¶
-
config const
workQueueMinDifferenceForSteal
= 1024*1024¶
-
config const
workQueueVerbose
= false¶
-
param
WorkQueueUnlimitedAggregation
= -1¶
-
param
WorkQueueNoAggregation
= 0¶
-
iter
doWorkLoop
(wq: WorkQueue(?workType), td: TerminationDetector, doWorkStealing = false, locales = Locales, tasks = 1..here.maxTaskPar): workType¶
-
iter
doWorkLoop
(wq: WorkQueue(?workType), td: TerminationDetector, doWorkStealing = false, locales = Locales, tasks = 1..here.maxTaskPar, param tag: iterKind): workType
-
proc
<=>
(ref wq1: WorkQueue, ref wq2: WorkQueue)¶
-
record
DuplicateCoalescer
¶ -
type
t
¶
-
var
dupValue
: t¶
-
proc
init
(type t, dupValue: t)¶
-
proc
this
(A: [?D] ?t)¶
-
type
-
proc
UninitializedWorkQueue
(type workType, coalesceFn: ?t = NopCoalescer(workType))¶
-
record
WorkQueue
¶ -
type
workType
¶
-
type
colaesceFnType
¶
-
var
instance
: unmanaged workTypeWorkQueueImplcolaesceFnType¶
-
var
pid
= -1¶
-
proc
init
(type workType, numAggregatedWork: int = WorkQueueNoAggregation, coalesceFn: ?t = new NopCoalescer(workType))¶
-
proc
isInitialized
()¶
-
proc
_value
¶
-
type
-
class
WorkQueueImpl
¶ -
type
workType
¶
-
var
pid
= -1¶
-
var
queue
= new unmanaged Bag(workType)¶
-
var
destBuffer
= UninitializedAggregator(workType)¶
-
var
dynamicDestBuffer
= UninitializedDynamicAggregator(workType)¶
-
var
asyncTasks
: TerminationDetector¶
-
var
shutdownSignal
: atomicbool¶
-
var
coalesceFn
¶
-
proc
init
(type workType, numAggregatedWork: int, coalesceFn: ? = new NopCoalescer(workType))¶
-
proc
init
(other, pid)
-
proc
destroy
()¶
-
proc
globalSize
¶
-
proc
size
¶
-
proc
workPending
¶
-
proc
dsiPrivatize
(pid)¶
-
proc
dsiGetPrivatizeData
()¶
-
proc
getPrivatizedInstance
()¶
-
proc
shutdown
()¶
-
proc
isShutdown
()¶
-
proc
addWork
(work: workType, loc: locale)¶
-
proc
addWork
(work: workType, locid = here.id)
-
proc
getWork
(): (bool, workType)¶
-
proc
getWorkBulk
(n: integral)¶
-
proc
isEmpty
()¶
-
proc
flushLocal
()¶
-
proc
flush
()¶
-
type
-
config const
workQueueInitialBlockSize
= 1024¶
-
config const
workQueueMaxBlockSize
= 1024*1024¶
-
class
Bag
¶ -
type
eltType
¶
-
var
startIdxEnq
: chpl__processorAtomicType(uint)¶ Helps evenly distribute and balance placement of elements in a best-effort round-robin approach. In the case where we have parallel enqueues or dequeues, they are less likely overlap with each other. Furthermore, it increases our chance to find our ‘ideal’ segment.
-
var
startIdxDeq
: chpl__processorAtomicType(uint)¶
-
var
maxParallelSegmentSpace
= {0..#here.maxTaskPar}¶
-
var
segments
: [maxParallelSegmentSpace] BagSegment(eltType)¶
-
proc
nextStartIdxEnq
¶
-
proc
nextStartIdxDeq
¶
-
proc
init
(type eltType)¶
-
proc
deinit
()¶
-
proc
size
¶
-
proc
addBulk
(elts: [?D] eltType)¶
-
proc
add
(elt: eltType): bool¶
-
proc
removeBulk
(n: integral)¶ Obtain work in bulk; returns an array with a size of at most ‘n’.
-
proc
remove
(): (bool, eltType)¶
-
type
-
proc
main
()¶