Skip to content

ParallelStorageArray

Overview

Represents a storage-level array.

We need to track which execution threads/invocations have written to which indices, so that we can (a) ensure that we won't get data races (and will have uniform control flow), and (b) in the future potentially simulate cases where we might get more undefined-like behavior between which values we get.

For storage-level arrays, we'll need to track (a) which workgroup, and (b) which local invocation within that workgroup wrote to that index. When a workgroup synchronizes with storageBarrier(), it will ONLY synchronize the actions that THAT SPECIFIC workgroup has done, and will leave the records of modifications from others alone.

TODO: for NOW, we'll lock out and fail on reads (if another thread wrote), OR multiple-thread writes, HOWEVER TODO: we should make it possible to return arbitrary results (and track values) for other cases

See ParallelExecutor for more high-level documentation.

@author Jonathan Olson <jonathan.olson@colorado.edu>

Class ParallelStorageArray

import { ParallelStorageArray } from 'scenerystack/alpenglow';

Constructor

new ParallelStorageArray( data : T[], indeterminateValue : T )

Instance Methods

get( context : ParallelContext<WorkgroupValues>, index : number ) : Promise<T>

set( context : ParallelContext<WorkgroupValues>, index : number, value : T ) : Promise<void>

synchronize( workgroupId : Vector3 )

synchronizeFull()

Source Code

See the source for ParallelStorageArray.ts in the alpenglow repository.