PeekPoke

Usage

use PeekPoke;

or

import PeekPoke;

Warning

This module is unstable and the API is likely to change over time.

This module provides peek() and poke() operations on atomics. peek() and poke() are non-atomic read and write operations. They can provide a performance improvement when local reads/writes are performed and atomicity is not required. For example they can be used to initialize an array of atomics or perform a reduction when no concurrent updates are occurring.

use BlockDist, PeekPoke;

const space = {1..1000};
const D = space dmapped Block(space);
var A: [D] atomic int;

forall i in D do
  A[i].poke(i);

const sum = + reduce A.peek();
writeln(sum); // 500500
proc AtomicBool.peek(): bool

Non-atomically reads the stored value.

proc AtomicBool.poke(value: bool): void

Non-atomically writes value.

proc AtomicT.peek(): T

Non-atomically reads the stored value.

proc AtomicT.poke(value: T): void

Non-atomically writes value.