DynamicAggregationBuffer

Usage

use DynamicAggregationBuffer;

Dynamic aggregator that will hold all buffers to be sent until explicitly requested by the user. This avoids the need to have to handle sending partial data when it is not needed to make progress. This comes with the issue that if no explicit flush is called, data never gets sent, but it opens the possibility of the user creating their own background progress task.

proc UninitializedDynamicAggregator(type msgType)
record DynamicAggregator
type msgType
var pid = -1
var instance: unmanaged nilable DynamicAggregatorImpl(msgType)
proc init(type msgType)
proc init(type msgType, instance: unmanaged nilable DynamicAggregatorImpl(msgType), pid: int)
proc init=(other)
proc destroy()
proc isInitialized()
proc _value
class DynamicBuffer
type msgType
var dom = {0..-1}
var arr: [dom] msgType
var lock: atomicbool
proc acquire()
proc release()
proc append(buf)
proc getArray()
proc done()
proc size
class DynamicAggregatorImpl
type msgType
var pid: int
var agg = UninitializedAggregator(msgType)
var dynamicDestBuffers: [LocaleSpace] unmanaged DynamicBuffer(msgType)
proc init(type msgType)
proc init(other, pid: int)
proc deinit()
proc dsiPrivatize(pid)
proc dsiGetPrivatizeData()
proc getPrivatizedInstance()
proc size()
proc aggregate(msg: msgType, loc: locale): void
proc aggregate(msg: msgType, locid: int): void
iter flushLocal(): (unmanaged DynamicBuffer(msgType), locale)
iter flushLocal(param tag: iterKind)
iter flushGlobal(): (unmanaged DynamicBuffer(msgType), locale)
iter flushGlobal(param tag: iterKind): (unmanaged DynamicBuffer(msgType), locale)