pub struct AMXTimingSource {
pub config: AMXTimingConfig,
}Expand description
Harvests timing jitter from the AMX (Apple Matrix eXtensions) coprocessor.
§What it measures
Nanosecond timing of SGEMM (single-precision matrix multiply) dispatches
to the AMX coprocessor via the Accelerate framework’s cblas_sgemm.
§Why it’s entropic
The AMX is a dedicated coprocessor on the Apple Silicon die with its own register file, pipeline, and memory paths. Its timing depends on:
- Pipeline occupancy from ALL prior AMX operations (every process)
- Memory bandwidth contention on the unified memory controller
- Power state transitions (idle → active ramp-up latency)
- SLC (System Level Cache) eviction patterns
- Thermal throttling affecting AMX frequency independently of CPU cores
§What makes it unique
No prior work has used AMX coprocessor timing as an entropy source. The AMX is a completely independent execution domain from CPU cores, providing entropy that is uncorrelated with CPU-based timing sources.
§Configuration
See AMXTimingConfig for tunable parameters. Key options:
von_neumann_debias: fixes severe LSB bias (recommended:true)interleave_memory_ops: disrupts pipeline steady-statematrix_sizes: controls which AMX pipeline configurations are exercised
Fields§
§config: AMXTimingConfigSource configuration. Use Default::default() for recommended settings.
Trait Implementations§
Source§impl Default for AMXTimingSource
impl Default for AMXTimingSource
Source§fn default() -> AMXTimingSource
fn default() -> AMXTimingSource
Returns the “default value” for a type. Read more
Source§impl EntropySource for AMXTimingSource
impl EntropySource for AMXTimingSource
Auto Trait Implementations§
impl Freeze for AMXTimingSource
impl RefUnwindSafe for AMXTimingSource
impl Send for AMXTimingSource
impl Sync for AMXTimingSource
impl Unpin for AMXTimingSource
impl UnwindSafe for AMXTimingSource
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more