PulseField™ enables independent parallel sequences for efficient PRNGs (such as BlastCircuit™ and RecoilFuse™).
Furthermore, PulseField™ has a minimum period, hyper-fast speed and reversibility.
PulseField™ was created by William Stafford Parsons as a product of GhostProxies.
PulseField™ is licensed with the BSD-3-Clause license.
The following C code block demonstrates an iterative PulseField™ procedure.
a = ROTATE_LEFT(a, CIRCULAR_SHIFT) ^ b;
b += INCREMENT;Both a and b must have a matching bits length of BITS_LENGTH (or ⁿ) as a power of 2 that's a supported data type length greater than or equal to 8.
b must be a Weyl sequence (or a counter) that wraps around BITS_LENGTH bits.
Each instance within a set of parallel PRNG instances that use PulseField™ must adhere to the following 4 seeding requirements before generating parallel PRNG sequences.
CIRCULAR_SHIFTmust be a number (greater than0and less thanBITS_LENGTH) that's consistent among the set of parallel instances.INCREMENTmust be an odd number (greater than0and less than2ⁿ) that's consistent among the set of parallel instances.amust be a number that's unique among the set of parallel instances.bmust be a number that's consistent among the set of parallel instances.
PulseField™ can generate up to 2ⁿ parallel instances that each avoid full state collisions (for at least 2ⁿ output results) among the set of parallel instances.
For example, the following PulseField™ seed values are valid for a set of 3 parallel PRNG instances.
a: 0
b: 0
a: 1
b: 0
a: 2
b: 0
After seeding a set of parallel PRNG instances that use PulseField™, assigning a value (outside of an iterative PulseField™ procedure) to a, b, CIRCULAR_SHIFT or INCREMENT may void the aforementioned parallelism properties.
After each iterative PulseField™ procedure (depending on the specific PRNG implementation requirements), a should either be output directly or mixed into additional state (excluding b) that affects the PRNG output.
pulsefield.c is an exhaustive PulseField™ validation (when BITS_LENGTH is 8 and the stdint.h header defines an 8-bit, unsigned integral type for uint8_t).