TandemRNG.jl
TandemRNG provides immutable random number generators for CPU and GPU workloads. A draw returns both its value and the next generator. Array fills and scalar draws share the same stream across supported backends.
TandemRNG is not a cryptographic PRNG. Do not use it for cryptography or security-sensitive applications.
using TandemRNG
rng = Tandem8x32(42)
value, rng = rand_next(rng, Float64)
values, rng = rand_next(rng, Float32, 4)
(value, values)(0.9829130398628935, Float32[0.99326736, 0.616472, 0.9698464, 0.47759295])Start with Getting started. See Streams and reproducibility for parallel jobs and saved state, Devices for GPU arrays, and Integrations for Random, PureRNGs, and Reactant. Design and validation describes the algorithm and the statistical evidence. The API reference lists the exported interface.
Current status
The default variant is Tandem8x32-K32. The package supports Julia 1.10 and later, CPU arrays, and optional CUDA, AMDGPU, Metal, and Reactant integrations. AMDGPU hardware validation remains open. Version 0.1.0 has no package release yet, and the package is not registered.
The validation evidence release contains statistical logs, case matrices, protocols, input hashes, frozen reproduction scripts, and flagged results. Finite statistical tests do not prove independence or cryptographic security.
The algorithm specification defines the recurrence, seeding, stream order, draw mappings, and test vectors. See the benchmark guide to reproduce performance measurements.
License and support
TandemRNG uses the Apache License, Version 2.0. Report bugs and request features through GitHub issues.