Skip to main content

DetectorProfile

Enum DetectorProfile 

Source
#[repr(u32)]
pub enum DetectorProfile { D16 = 16, D64 = 64, D128 = 128, D205 = 205, D512 = 512, D1024 = 1_024, D2000 = 2_000, }
Expand description

R.9 — detector-axis expansion profiles. Seven profile IDs are reserved (D16, D64, D128, D205, D512, D1024, D2000). At HEAD D16, D64, and D128 are fully implemented: D16 is the legacy 16-motif profile (R.9.a, audit-mode reference); D64 is the R.9.b/R.10/R.11 throughput path that drove the R.13 ~55× full-pipeline campaign reduction; D128 is the R.9.d.1 scaling-ladder proof (commit 99a0f3b, 16 motifs × 8 variants, wide-digest baseline with R.10b compact-pack deferred). D205 and the wider profiles still reserve their identity + registry- hash slots, deferred to paper §16.

Why this exists. R.7 reported 2.9× GPU Layer B at K=64 with the 16-detector court. R.8 showed the dominant cost was the host bank + digest plumbing, not the kernel math; R.8.5 + R.11 cleared those bottlenecks down to ~72 ms at 256×4096 K=1. With the launch + finalize floor squeezed, more detectors per cell is the load-bearing way to keep the GPU saturated. The Atlas continuation calls for 2 000+ algebra-generated detectors; R.9 brings 16 → 2 000 inside this prior-art crate so the R.13 headline benchmark can run on the architecture’s intended scale.

Canonical 16-detector preservation: D16 derives the same registry_hash bytes that registry_hash returns. Audit-mode golden hashes are not touched by R.9.a. Wider profiles compose the canonical 16-motif hash with a profile-id + active-count suffix so their detector_registry_hash is deterministic and distinct per profile.

Variants§

§

D16 = 16

16 detectors. The canonical court. Byte-identical to the pre-R.9 path; Audit golden hashes pin this profile.

§

D64 = 64

64 detectors. v1 expansion (4 parameter variants per family). Scaffolded in R.9.a; wide-mask kernel lands in R.9.b.

§

D128 = 128

128 detectors. v1 expansion (8 variants per family).

§

D205 = 205

205 detectors. Mirrors the dsfb-debug taxonomy size — the “mature 205-detector court” the user named in the campaign brief.

§

D512 = 512

512 detectors. Mid-Atlas density.

§

D1024 = 1_024

1024 detectors. Approaching Atlas headline.

§

D2000 = 2_000

2000 detectors. Headline target per the user’s locked R.9 scope. The R.13 ≥10× gate is measured here.

Implementations§

Source§

impl DetectorProfile

Source

pub const fn active_detector_count(self) -> u32

Number of active detector bits this profile carries. Always equals the enum’s numeric value; surfaced as a method for readability at call sites.

Source

pub const fn name(self) -> &'static str

Short stable identifier string. Used inside the canonical per-profile registry-hash derivation; never localised or reformatted.

Source

pub const fn mask_word_count(self) -> u32

Width of the per-cell detector bitset in 64-bit words. R.9.b will pin DetectorCell to [u64; MASK_WORDS] so 2 048 bits fit at the headline profile. D16 still uses the legacy u32 cell field in R.9.a; the wider mask only activates when the wide-kernel commit lands.

Source

pub fn registry_hash(self) -> [u8; 32]

Returns the canonical per-profile detector_registry_hash that the contract pins for this profile.

Byte stability: DetectorProfile::D16.registry_hash() == motif::registry_hash() — the canonical 16-detector court’s hash is unchanged. Wider profiles compose:

  sha256(
      "DSFB-GPU-DEBUG:detector-profile:v1\0"
      || canonical_motif_registry_hash
      || profile_name_ascii
      || 0x00
      || active_detector_count_le_u32
  )

The domain prefix prevents the wider profiles’ hashes from colliding with any other 32-byte commitment in the chain. The active count is included so a future R.9.b that reorganises the 64/128/etc variant table without changing the profile-id-string would still produce a fresh hash if the count changed. The R.9.b commit may extend this derivation with the parameter-variant table; that’s a v2 derivation when it lands.

Trait Implementations§

Source§

impl Clone for DetectorProfile

Source§

fn clone(&self) -> DetectorProfile

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DetectorProfile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for DetectorProfile

Source§

fn eq(&self, other: &DetectorProfile) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for DetectorProfile

Source§

impl Eq for DetectorProfile

Source§

impl StructuralPartialEq for DetectorProfile

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.