Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
64c3632
perf(onehot): keep big blocks on the tiled column sweep; row-pass acc…
markosg04 Jul 23, 2026
c410b5c
perf(onehot): fused multi-polynomial commit sweep
markosg04 Jul 24, 2026
91591ee
perf(onehot): keep merge-sweep accumulator tile and column chunk L1-r…
markosg04 Jul 24, 2026
333b309
fix(onehot): self-reduce merge-sweep accumulators at the cap; no bloc…
markosg04 Jul 24, 2026
bc87e22
perf(onehot): bench-tuned merge-sweep defaults (tile 64 blocks, chunk…
markosg04 Jul 24, 2026
bddd74d
feat(onehot): expose clear_block_cache on OneHotPoly
markosg04 Jul 25, 2026
450c618
perf(prover): build the setup NTT envelope slot lazily and let caller…
markosg04 Jul 26, 2026
102ee81
perf(prover): extent-sized NTT slots + streamed root-relation transfo…
markosg04 Jul 26, 2026
59c2d2b
perf(prover): drop built NTT slots after the root fold level — fold w…
markosg04 Jul 26, 2026
6da10a2
perf(prover): releasable setup matrix with seed re-derivation — 2^26 …
markosg04 Jul 26, 2026
cada0f5
perf(prover): build commit-sweep block tiles lazily from index column…
markosg04 Jul 26, 2026
cdca67a
perf(prover): stream fold blocks from index columns — per-block build…
markosg04 Jul 26, 2026
2e5e6d6
refactor: shrink the perf-branch diff before upstreaming
markosg04 Jul 27, 2026
877ef5f
perf(algebra): fuse fixed-size wide ring shifts
quangvdao Jul 28, 2026
cef7943
perf(algebra): expose wide ring coefficients
quangvdao Jul 28, 2026
6ccebe2
perf(prover): consume decompose witness rows without copies
quangvdao Jul 28, 2026
f73b435
perf(prover): release root opening storage after fold
markosg04 Jul 30, 2026
d3d35e6
fix(profile): propagate commit accumulator bounds
markosg04 Jul 31, 2026
9d771aa
perf(prover): cache only required commit transform
markosg04 Jul 30, 2026
e5314aa
perf(prover): stream CRT-chunked quotient roles
markosg04 Jul 30, 2026
0f9c8ea
perf(prover): parallelize relation setup columns
markosg04 Jul 30, 2026
c96a880
perf(prover): coalesce aligned relation events
markosg04 Jul 30, 2026
815701a
perf(prover): parallelize exact-prefix folds
markosg04 Jul 31, 2026
8c25605
fix(prover): preserve group-local relation dimensions
markosg04 Jul 31, 2026
ee6d9db
perf(planner): trade payload slack for narrower roots
quangvdao Jul 27, 2026
5b59a07
fix(planner): preserve scalar rank policy through recursion
markosg04 Aug 1, 2026
04c2f1e
Merge Akita protocol optimizations
markosg04 Aug 1, 2026
71796cc
Merge remote-tracking branch 'origin/main' into perf/akita-protocol-opts
markosg04 Aug 1, 2026
51f98b1
Merge branch 'perf/akita-protocol-opts' into perf/akita-prover-opt
markosg04 Aug 1, 2026
832ade1
fix(planner): emit rustfmt-stable catalog imports
markosg04 Aug 1, 2026
9b6a1f8
Merge branch 'perf/akita-protocol-opts' into perf/akita-prover-opt
markosg04 Aug 1, 2026
44cfa3f
fix(planner): remove stale lint expectation
markosg04 Aug 3, 2026
755765e
fix(types): size released setup without rebuilding
markosg04 Aug 3, 2026
7ff283b
test(prover): drop local tuning probes
markosg04 Aug 3, 2026
5a8170d
fix(pcs): update releasable setup call sites
markosg04 Aug 3, 2026
2277146
test(pcs): align mixed-D cache test with lazy setup
markosg04 Aug 3, 2026
2b6c6a6
test(prover): split oversized backend test modules
markosg04 Aug 3, 2026
2acecb9
feat(planner): decouple inner commitment basis
quangvdao Aug 6, 2026
4108d60
fix(planner): bound independent-basis search
quangvdao Aug 6, 2026
72e934c
refactor(prover): split CPU backend by role
quangvdao Aug 6, 2026
e2672db
perf(planner): evict bounded memo entries
quangvdao Aug 6, 2026
8e4fd88
fix(planner): skip discarded sweep work
quangvdao Aug 6, 2026
c0bbe27
test(config): expect independent dense basis
quangvdao Aug 6, 2026
f398712
fix(planner): decouple precommit inner basis
quangvdao Aug 6, 2026
bb4034f
refactor(planner): tighten candidate context
quangvdao Aug 6, 2026
03e997f
feat(planner): preserve partial regen rows
quangvdao Aug 6, 2026
aefa64a
chore(schedules): restore D64 onehot rows
quangvdao Aug 6, 2026
083aa06
refactor(prover): isolate CPU prepared setup
quangvdao Aug 6, 2026
04edba2
ci(planner): avoid redundant table regeneration
quangvdao Aug 6, 2026
306dfdd
fix(planner): preserve unsupported regen rows
quangvdao Aug 6, 2026
addb668
feat(planner)!: complete independent basis search
quangvdao Aug 7, 2026
d2539e9
refactor(planner): integrate flat challenge cutover
quangvdao Aug 7, 2026
456dbf4
fix(ci): refresh precommit registries
quangvdao Aug 7, 2026
79473a1
fix(sis): harden table publication
quangvdao Aug 7, 2026
0732d5d
fix(schedules): refresh SIS table identity
quangvdao Aug 7, 2026
22bcabc
chore(sis): remove obsolete audit CSV
quangvdao Aug 7, 2026
bc488d6
revert(planner): drop payload-slack schedule selection
markosg04 Aug 7, 2026
2003390
fix(ci): repair doc links and glue trait bound
markosg04 Aug 7, 2026
f0473f1
merge(main): reconcile prover optimizations with flattened setup
markosg04 Aug 7, 2026
8f99513
fix(tests): drop tensor-kernel test and port oracle to flat views
markosg04 Aug 7, 2026
09e0909
fix(compute): restore onehot_chunk_size on RootPolyMeta
markosg04 Aug 7, 2026
a9f3c29
fix(compute): restore one-hot chunk-size metadata on root polys
markosg04 Aug 7, 2026
2d17e55
fix(prover): close optimization review gaps
quangvdao Aug 7, 2026
2ebbd51
Merge remote-tracking branch 'origin/main' into quang/pr-345-prover-o…
quangvdao Aug 7, 2026
99b91e4
fix(onehot): make block cache caller-owned
quangvdao Aug 8, 2026
59d8a57
chore(sync): merge main into PR 355
quangvdao Aug 8, 2026
a217807
fix(cache): make tensor and NTT retention explicit
quangvdao Aug 8, 2026
6471f38
Merge branch 'main' into quang/pr-345-prover-optimizations
quangvdao Aug 8, 2026
165ad16
refactor(profile): split workload module
quangvdao Aug 8, 2026
82b129a
Merge branch 'main' into quang/pr-345-prover-optimizations
sumchecker Aug 8, 2026
bb42140
docs(spec): define PR 375 end state
quangvdao Aug 8, 2026
0d2fb19
fix(cache): align NTT prewarm and release
quangvdao Aug 8, 2026
bcd2383
refactor(onehot): unify sparse block representation
quangvdao Aug 8, 2026
d90b039
refactor(commit): finish source-typed kernel cutover
quangvdao Aug 9, 2026
0798713
perf(onehot): unify commit sweep scheduling
quangvdao Aug 9, 2026
c9fcd30
merge(main): integrate planner cutovers
quangvdao Aug 9, 2026
791a9f5
merge(main): update cmov dependency
quangvdao Aug 9, 2026
6a1250b
fix(commit): restore group source parallelism
quangvdao Aug 9, 2026
731dff4
refactor(onehot): remove mutable derived caches
quangvdao Aug 9, 2026
7f72b30
ci(profile): improve reports and narrow builds
quangvdao Aug 9, 2026
de130d5
perf(planner): reduce recursive sizing overhead
quangvdao Aug 9, 2026
afcc44c
merge(main): update verifier kernels
quangvdao Aug 9, 2026
4c37e14
refactor(ring-switch): unify quotient planning
quangvdao Aug 9, 2026
e232344
ci(profile): unify fold report layout
quangvdao Aug 9, 2026
b6d934f
chore(pr375): complete validation slice
quangvdao Aug 9, 2026
3f99bf9
fix(prover): close independent review gaps
quangvdao Aug 9, 2026
0f9a710
fix(profile): correct multi-group report values
quangvdao Aug 9, 2026
b51d732
feat(profile): compare verifier thread modes
quangvdao Aug 9, 2026
2e4f995
perf(planner): retain hot suffix cache entries
quangvdao Aug 9, 2026
f08d32d
refactor(profile): clarify fold report cells
quangvdao Aug 9, 2026
69ef6bb
merge main (b0f2cadc5) into quang/pr-345-prover-optimizations
quangvdao Aug 9, 2026
7d507ae
perf(planner): bound recursive split frontier
quangvdao Aug 9, 2026
e68d0c6
fix(sis): restore generated table identity
quangvdao Aug 9, 2026
46a6dcd
fix(profile): remove persisted bench setup
quangvdao Aug 9, 2026
86a4a60
fix(prover): preserve i16 opening digits
quangvdao Aug 9, 2026
d6ccd94
docs(pr375): reopen CPU policy spec
quangvdao Aug 9, 2026
a32b3ab
refactor(planner): resolve review findings
quangvdao Aug 9, 2026
2a2c033
feat(compute): configure CPU resource limits
quangvdao Aug 9, 2026
d9c0c13
fix(planner): preserve terminal basis winners
quangvdao Aug 9, 2026
e7746b5
fix(compute): release all CPU NTT caches
quangvdao Aug 9, 2026
e9a25b8
fix(compute): retain compression NTT cache
quangvdao Aug 9, 2026
9c35ec5
feat(profile): report CPU resource limits
quangvdao Aug 9, 2026
628a950
perf(ntt): use exact tail for quotients
quangvdao Aug 10, 2026
f882b24
test(ntt): guard small-field cache plans
quangvdao Aug 10, 2026
7303892
ci(profile): clarify dense benchmark suite
quangvdao Aug 10, 2026
fc948f9
merge(profile): stack benchmark report updates
quangvdao Aug 10, 2026
c3c0195
merge: stack prover optimizations into planner
quangvdao Aug 10, 2026
c45a544
fix(ntt): fail closed on unsafe streaming
quangvdao Aug 10, 2026
53c9c24
Merge branch 'quang/pr-345-prover-optimizations' into codex/inner-bas…
quangvdao Aug 10, 2026
466a97c
test(pcs): dispatch adaptive opening dimensions
quangvdao Aug 10, 2026
6e620cd
fix(pcs): generalize adaptive opening helper
quangvdao Aug 10, 2026
c5fbbf0
fix(profile): close benchmark report review gaps
quangvdao Aug 10, 2026
5dbc813
Merge remote-tracking branch 'origin/feat/profile-bench-report-layout…
quangvdao Aug 10, 2026
8feefc3
refactor(planner): centralize admission and pruning
quangvdao Aug 10, 2026
055ebca
fix(prover): resolve routed cache review findings
quangvdao Aug 10, 2026
b0ce7cf
Merge remote-tracking branch 'origin/quang/pr-345-prover-optimization…
quangvdao Aug 10, 2026
5b80b8d
fix(ci): align recursive profile linkage
quangvdao Aug 10, 2026
acfa13c
Merge remote-tracking branch 'origin/quang/pr-345-prover-optimization…
quangvdao Aug 10, 2026
08f2f0c
fix(ci): align recursive profile linkage
quangvdao Aug 10, 2026
c13a885
merge updated profile report base into prover optimizations
quangvdao Aug 10, 2026
6d9611a
merge updated prover optimization base into inner basis planner
quangvdao Aug 10, 2026
bd9e308
fix(ci): restore balanced nextest shards
quangvdao Aug 10, 2026
d120fdb
test(pcs): pin adaptive W8R2 schedule shape
quangvdao Aug 10, 2026
ef88d0a
Merge commit 'bd9e30827' into quang/pr-345-prover-optimizations
quangvdao Aug 10, 2026
6f30be0
Merge commit 'ef88d0a3f' into codex/inner-basis-padded-prefix
quangvdao Aug 10, 2026
39c95cd
merge(main): connect squashed benchmark base
quangvdao Aug 10, 2026
779b322
fix(profile): address benchmark review follow-ups
quangvdao Aug 10, 2026
4507a47
merge PR 375 (779b322b1) into PR 355
quangvdao Aug 10, 2026
318366c
merge(main): connect squashed PR 375
quangvdao Aug 10, 2026
8bf66b3
fix(ci): isolate recursion build cache
quangvdao Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/profile-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ jobs:
group:
- name: 1-fp128-dense
cases: |
dense_fp128_d64:24:1
dense_fp32_d128:26:1
dense_fp64_d128:26:1
dense_fp128_d64:26:1
- name: 2-fp128-tensor
cases: |
onehot_fp128_d64_tensor:26:1
Expand Down
2 changes: 2 additions & 0 deletions crates/akita-config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ schedules-default = [
"schedules-fp128-d128-dense",
"schedules-fp128-d256-onehot",
"schedules-fp32-d128-onehot",
"schedules-fp32-d128-dense",
"schedules-fp32-d256-onehot",
"schedules-fp64-d128-dense",
"schedules-fp64-d128-onehot",
Expand Down Expand Up @@ -69,6 +70,7 @@ schedules-fp128-d64-dense-multi-chunk = [
]

schedules-fp32-d128-onehot = ["akita-schedules/fp32-d128-onehot"]
schedules-fp32-d128-dense = ["akita-schedules/fp32-d128-dense"]
schedules-fp32-d256-onehot = ["akita-schedules/fp32-d256-onehot"]
schedules-fp64-d128-dense = ["akita-schedules/fp64-d128-dense"]
schedules-fp64-d128-onehot = ["akita-schedules/fp64-d128-onehot"]
Expand Down
29 changes: 20 additions & 9 deletions crates/akita-config/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ macro_rules! impl_multi_chunk_companion {
max_num_batched_polys,
)
}
fn basis_range() -> (u32, u32) {
<$base as $crate::CommitmentConfig>::basis_range()
fn opening_basis_range() -> (u32, u32) {
<$base as $crate::CommitmentConfig>::opening_basis_range()
}
fn inner_basis_range() -> (u32, u32) {
<$base as $crate::CommitmentConfig>::inner_basis_range()
}
fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec {
<$base as $crate::CommitmentConfig>::root_honest_fold_policy()
Expand Down Expand Up @@ -145,7 +148,8 @@ pub fn policy_of<Cfg: CommitmentConfig>() -> PlannerPolicy {
ring_subfield_norm_bound: Cfg::ring_subfield_embedding_norm_bound(),
claim_ext_degree: Cfg::EXT_DEGREE,
chal_ext_degree: Cfg::EXT_DEGREE,
basis_range: Cfg::basis_range(),
inner_basis_range: Cfg::inner_basis_range(),
opening_basis_range: Cfg::opening_basis_range(),
witness_chunk: Cfg::chunked_witness_cfg(),
recursive_setup_planning,
}
Expand Down Expand Up @@ -296,7 +300,13 @@ pub trait CommitmentConfig: Clone + Send + Sync + 'static {

/// Inclusive `(min, max)` log-basis search range.
#[doc(hidden)]
fn basis_range() -> (u32, u32);
fn opening_basis_range() -> (u32, u32);

/// Inclusive A/source decomposition basis range at every fold level.
#[doc(hidden)]
fn inner_basis_range() -> (u32, u32) {
Self::opening_basis_range()
}

/// Group-owned honest sizing rule used only during offline planning.
fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec;
Expand All @@ -321,16 +331,17 @@ pub trait CommitmentConfig: Clone + Send + Sync + 'static {

/// Catalog-bound schedule selection objective.
///
/// Uniform/direct presets minimize proof payload. Recursive setup presets
/// minimize the first remaining direct setup footprint before payload.
/// Uniform/direct presets minimize the next recursive witness before proof
/// payload. Recursive setup presets minimize the first remaining direct
/// setup footprint, then the next witness, before payload.
/// Mixed-dimension catalogs may opt into the physical setup-field objective
/// explicitly; the policy is part of catalog identity and never inferred
/// from a ring dimension.
fn selection_policy() -> akita_schedules::SelectionPolicyId {
if Self::recursive_setup_planning() {
akita_schedules::SelectionPolicyId::MinFirstDirectSetupThenPayload
} else {
akita_schedules::SelectionPolicyId::MinEstimatedProofPayload
akita_schedules::SelectionPolicyId::MinNextWitnessThenPayload
}
}

Expand Down Expand Up @@ -492,7 +503,7 @@ mod tests {
Ok(SetupMatrixCapacity::minimum())
}

fn basis_range() -> (u32, u32) {
fn opening_basis_range() -> (u32, u32) {
(3, 3)
}

Expand Down Expand Up @@ -745,7 +756,7 @@ mod precommit_tests {
)
.expect("precommitted group params");
let precommitted = akita_types::CommittedGroupProfile::from_params(group, &params);
let root_basis = fp128::D64OneHot::basis_range().0;
let root_basis = fp128::D64OneHot::opening_basis_range().0;
assert_eq!(precommitted.log_basis_inner, root_basis);
assert_eq!(precommitted.log_basis_outer, root_basis);
assert_eq!(precommitted.num_positions_per_block, 256);
Expand Down
4 changes: 2 additions & 2 deletions crates/akita-config/src/precommitted_commitment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ impl<Cfg: CommitmentConfig> CommitmentConfig for PrecommittedCommitmentConfig<Cf
})
}

fn basis_range() -> (u32, u32) {
Cfg::basis_range()
fn opening_basis_range() -> (u32, u32) {
Cfg::opening_basis_range()
}

fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec {
Expand Down
25 changes: 21 additions & 4 deletions crates/akita-config/src/proof_optimized.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@ use std::sync::{LazyLock, Mutex};
/// Minimum proof-optimized log-basis.
///
/// This is also the fixed **root-fold** basis: `log_basis_search_range_at_level(0)`
/// collapses the root to `basis_range.0`. Pinning the root to `3` (rather than the
/// collapses the root to `opening_basis_range.0`. Pinning the root to `3` (rather than the
/// smallest reachable `2`) keeps the shrink strong enough that every preset — dense
/// and small-field included — supports the full `nv` range, and matches the value
/// the unpinned planner already favored at the root.
pub(crate) const PROOF_OPTIMIZED_LOG_BASIS_MIN: u32 = 3;
/// Maximum proof-optimized log-basis.
pub(crate) const PROOF_OPTIMIZED_LOG_BASIS_MAX: u32 = 6;
/// Maximum A/source log basis supported by the signed-i16 commitment path.
pub(crate) const PROOF_OPTIMIZED_INNER_LOG_BASIS_MAX: u32 = 16;
/// Explicit sparse-binary chunk size used by standard one-hot presets.
///
/// Smaller/nonstandard chunking is represented by a separately named preset
Expand Down Expand Up @@ -408,7 +410,7 @@ macro_rules! impl_proof_optimized_preset {
if Self::recursive_setup_planning() {
akita_schedules::SelectionPolicyId::MinFirstDirectSetupThenPayload
} else {
akita_schedules::SelectionPolicyId::MinEstimatedProofPayload
akita_schedules::SelectionPolicyId::MinNextWitnessThenPayload
}
}
};
Expand Down Expand Up @@ -503,13 +505,20 @@ macro_rules! impl_proof_optimized_preset {
)
}

fn basis_range() -> (u32, u32) {
fn opening_basis_range() -> (u32, u32) {
(
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MIN,
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MAX,
)
}

fn inner_basis_range() -> (u32, u32) {
(
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MIN,
$crate::proof_optimized::PROOF_OPTIMIZED_INNER_LOG_BASIS_MAX,
)
}

fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec {
let legacy_witness = $fold_norms;
if $log_commit_bound == 1 {
Expand Down Expand Up @@ -580,13 +589,21 @@ macro_rules! impl_proof_optimized_preset {
)
}

fn basis_range() -> (u32, u32) {
fn opening_basis_range() -> (u32, u32) {
(
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MIN,
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MAX,
)
}


fn inner_basis_range() -> (u32, u32) {
(
$crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MIN,
$crate::proof_optimized::PROOF_OPTIMIZED_INNER_LOG_BASIS_MAX,
)
}

fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec {
let legacy_witness = $fold_norms;
if $log_commit_bound == 1 {
Expand Down
7 changes: 6 additions & 1 deletion crates/akita-config/src/proof_optimized/fp32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,12 @@ impl_proof_optimized_preset!(
128,
32,
32,
fold_norms = akita_types::sis::FoldWitnessNorms::bounded(3, 128)
fold_norms = akita_types::sis::FoldWitnessNorms::bounded(3, 128),
schedules = (
"schedules-fp32-d128-dense",
"fp32_d128_dense",
fp32_d128_dense_table
)
);
impl_proof_optimized_preset!(
D128OneHot,
Expand Down
4 changes: 2 additions & 2 deletions crates/akita-config/src/recursive_commitment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ impl<Cfg: CommitmentConfig> CommitmentConfig for RecursiveCommitmentConfig<Cfg>
)
}

fn basis_range() -> (u32, u32) {
Cfg::basis_range()
fn opening_basis_range() -> (u32, u32) {
Cfg::opening_basis_range()
Comment thread
cursor[bot] marked this conversation as resolved.
}

fn root_honest_fold_policy() -> akita_types::sis::HonestFoldPolicySpec {
Expand Down
2 changes: 1 addition & 1 deletion crates/akita-config/src/tensor_verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ pub mod fp128 {
)
}

fn basis_range() -> (u32, u32) {
fn opening_basis_range() -> (u32, u32) {
(
crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MIN,
crate::proof_optimized::PROOF_OPTIMIZED_LOG_BASIS_MAX,
Expand Down
115 changes: 115 additions & 0 deletions crates/akita-config/tests/generated_tables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ fn family_catalog_is_linked(family: &GeneratedFamily) -> bool {
"fp64_d128_dense" => fp64::D128Dense::schedule_catalog().is_some(),
"fp64_d128_onehot" => fp64::D128OneHot::schedule_catalog().is_some(),
"fp64_d256_onehot" => fp64::D256OneHot::schedule_catalog().is_some(),
"fp32_d128_dense" => fp32::D128Dense::schedule_catalog().is_some(),
"fp32_d128_onehot" => fp32::D128OneHot::schedule_catalog().is_some(),
"fp32_d256_onehot" => fp32::D256OneHot::schedule_catalog().is_some(),
other => panic!("unknown generated family for catalog guard: {other}"),
Expand Down Expand Up @@ -373,6 +374,7 @@ fn family_catalog(
"fp64_d128_dense" => prepare_family_catalog::<fp64::D128Dense>(family, keys),
"fp64_d128_onehot" => prepare_family_catalog::<fp64::D128OneHot>(family, keys),
"fp64_d256_onehot" => prepare_family_catalog::<fp64::D256OneHot>(family, keys),
"fp32_d128_dense" => prepare_family_catalog::<fp32::D128Dense>(family, keys),
"fp32_d128_onehot" => prepare_family_catalog::<fp32::D128OneHot>(family, keys),
"fp32_d256_onehot" => prepare_family_catalog::<fp32::D256OneHot>(family, keys),
other => panic!("unknown generated family for catalog guard: {other}"),
Expand Down Expand Up @@ -455,6 +457,9 @@ fn assert_family_group_batch_table_hit(family: &GeneratedFamily, requests: &[Gro
"fp64_d256_onehot" => {
assert_group_batch_table_hits::<fp64::D256OneHot>(family.module_name, requests)
}
"fp32_d128_dense" => {
assert_group_batch_table_hits::<fp32::D128Dense>(family.module_name, requests)
}
"fp32_d128_onehot" => {
assert_group_batch_table_hits::<fp32::D128OneHot>(family.module_name, requests)
}
Expand Down Expand Up @@ -537,6 +542,7 @@ fn resolve_family_group_batch_schedule(
"fp64_d128_dense" => table_backed_group_batch_schedule::<fp64::D128Dense>(request),
"fp64_d128_onehot" => table_backed_group_batch_schedule::<fp64::D128OneHot>(request),
"fp64_d256_onehot" => table_backed_group_batch_schedule::<fp64::D256OneHot>(request),
"fp32_d128_dense" => table_backed_group_batch_schedule::<fp32::D128Dense>(request),
"fp32_d128_onehot" => table_backed_group_batch_schedule::<fp32::D128OneHot>(request),
"fp32_d256_onehot" => table_backed_group_batch_schedule::<fp32::D256OneHot>(request),
other => panic!("unknown generated family for multi-group schedule guard: {other}"),
Expand Down Expand Up @@ -956,3 +962,112 @@ fn generated_schedule_tables_match_key_planner() {
hint = regen_hint(),
);
}

#[test]
fn dense_nv26_independent_inner_basis_snapshots() {
#[derive(Debug, PartialEq, Eq)]
struct Snapshot {
inner_basis: u32,
opening_basis: u32,
positions: usize,
blocks: usize,
inner_digits: usize,
n_a: usize,
n_b: usize,
n_d: usize,
a_input_raw: usize,
a_output_raw: usize,
b_input_raw: usize,
b_output_raw: usize,
d_input_raw: usize,
d_output_raw: usize,
next_witness: usize,
}

fn snapshot<Cfg: CommitmentConfig>() -> Snapshot {
let schedule = Cfg::runtime_schedule(AkitaScheduleLookupKey::single(
PolynomialGroupLayout::singleton(26),
))
.expect("generated dense nv=26 schedule");
let root = &schedule.root.params.final_group.commitment;
let dims = root.role_dims();
Snapshot {
inner_basis: root.log_basis_inner,
opening_basis: root.log_basis_open,
positions: root.num_positions_per_block,
blocks: root.num_live_blocks,
inner_digits: root.num_digits_inner,
n_a: root.inner_commit_matrix.output_rank(),
n_b: root.outer_commit_matrix.output_rank(),
n_d: root.open_commit_matrix.output_rank(),
a_input_raw: root.inner_commit_matrix.input_width() * dims.d_a(),
a_output_raw: root.inner_commit_matrix.output_rank() * dims.d_a(),
b_input_raw: root.outer_commit_matrix.input_width() * dims.d_b(),
b_output_raw: root.outer_commit_matrix.output_rank() * dims.d_b(),
d_input_raw: root.open_commit_matrix.input_width() * dims.d_d(),
d_output_raw: root.open_commit_matrix.output_rank() * dims.d_d(),
next_witness: schedule.root.output_witness_len,
}
}

assert_eq!(
snapshot::<fp32::D128Dense>(),
Snapshot {
inner_basis: 11,
opening_basis: 3,
positions: 2048,
blocks: 256,
inner_digits: 3,
n_a: 15,
n_b: 2,
n_d: 2,
a_input_raw: 786_432,
a_output_raw: 1_920,
b_input_raw: 5_406_720,
b_output_raw: 256,
d_input_raw: 360_448,
d_output_raw: 256,
next_witness: 11_323_008,
}
);
assert_eq!(
snapshot::<fp64::D128Dense>(),
Snapshot {
inner_basis: 11,
opening_basis: 3,
positions: 2048,
blocks: 256,
inner_digits: 6,
n_a: 9,
n_b: 1,
n_d: 1,
a_input_raw: 1_572_864,
a_output_raw: 1_152,
b_input_raw: 6_488_064,
b_output_raw: 128,
d_input_raw: 720_896,
d_output_raw: 128,
next_witness: 18_275_456,
}
);
assert_eq!(
snapshot::<fp128::D64Dense>(),
Snapshot {
inner_basis: 11,
opening_basis: 3,
positions: 2048,
blocks: 512,
inner_digits: 12,
n_a: 9,
n_b: 1,
n_d: 1,
a_input_raw: 1_572_864,
a_output_raw: 576,
b_input_raw: 12_681_216,
b_output_raw: 64,
d_input_raw: 1_409_024,
d_output_raw: 64,
next_witness: 25_155_904,
}
);
}
Loading
Loading