pub struct Pcg {
pub seed: u64,
pub stream: u64,
/* private fields */
}Expand description
PCG-RXS-M-XS 64/64 random number generator with fixed seed and stream.
Signature: pcg(input: u64, seed: u64, stream: u64) -> u64
The seed and stream are init-time constants baked into the node.
The input wire selects which element of the sequence to return.
Seeking is O(log N) so any position can be accessed directly.
Use this when every thread/cycle needs an independent, deterministic random value from the same generator. The output is a full 64-bit pseudo-random value suitable for feeding into range reduction, unit-interval mapping, or distribution sampling.
JIT level: P2 (auto-emitted compiled_u64 closure with captured
seed and stream; the body recomputes inc = 2*stream + 1
per call — a single mul+add, negligible vs the seek work).
jit_constants: [seed, stream] in declaration order.
Fields§
§seed: u64The seed argument, as given at construction.
stream: u64The stream argument, as given at construction.
Implementations§
Trait Implementations§
Source§impl PolydatNode for Pcg
impl PolydatNode for Pcg
Source§fn compiled_u64(&self) -> Option<CompiledU64Op>
fn compiled_u64(&self) -> Option<CompiledU64Op>
Source§fn jit_constants(&self) -> Vec<u64>
fn jit_constants(&self) -> Vec<u64>
Source§fn scratch_layout(&self) -> Vec<ScratchElem>
fn scratch_layout(&self) -> Vec<ScratchElem>
Self::eval_in. Empty for a node that evaluates over
Values alone, which is every node but a native cone.Source§fn eval_in(
&self,
scratch: &mut [ScratchBuf],
inputs: &[Value],
outputs: &mut [Value],
)
fn eval_in( &self, scratch: &mut [ScratchBuf], inputs: &[Value], outputs: &mut [Value], )
Self::eval with the node’s scratch, which the evaluating
state owns and hands in: storage belongs to the state, never to
the node, which is shared by every state of the program.Source§fn commutativity(&self) -> Commutativity
fn commutativity(&self) -> Commutativity
Source§fn accepts_none_inputs(&self) -> bool
fn accepts_none_inputs(&self) -> bool
Value::None inputs
directly rather than have the kernel propagate None through
it. Default: false — most nodes follow SRD-74 Rule 1
(None in → None out, no eval invocation). Read moreSource§fn compiled_slot(&self, _wire_types: &[PortType]) -> Option<CompiledSlotKit>
fn compiled_slot(&self, _wire_types: &[PortType]) -> Option<CompiledSlotKit>
(ptr, len) slot
pairs; vector outputs write into kernel-owned scratch.
Checked by the compiled-kernel builders AFTER
Self::compiled_u64 — pure-scalar nodes never need it.
Default None: the node stays on typed eval.Source§fn purity(&self) -> Purity
fn purity(&self) -> Purity
runtime_model.md’s D2 axiom. Default:
Purity::Pure. Override to declare an observable
side channel (Purity::SideChannel) or
eval-call-spanning state (Purity::Nondeterministic). Read moreSource§fn simd_variant(&self) -> Option<SimdVariant>
fn simd_variant(&self) -> Option<SimdVariant>
Source§fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
PolydatProgram::canonical_hash) walks THROUGH fusion
nodes into this subgraph, so identity is invariant to the
engine mix: jit=off and jit=auto compiles of the same
source hash identically, and resume-skip matching survives
mode changes. Default None: ordinary nodes hash as
themselves.