You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Self-contained, runnable examples cover scalar arithmetic across every field,
parity-shard encoding and erasure recovery, streaming GF(2^16) parity updates,
bit-packed Hamming syndromes, extension-field embeddings and trace/norm, and
canonical prime-field evaluation-vector arithmetic.
just example NAME [ARGS] and just examples [ARGS] run one tutorial or the
complete educational set, including portable builds with alloc.
QuadMersenne31 dispatches V4x under simd512: mul_into, mul_add,
and mul_elementwise run AVX-512 kernels, and backend_for::<QuadMersenne31>()
reports v4x on those hosts. The remaining operations run the AVX2 kernels.
Changed
BENCHMARKS.md presents a complete Tiger Lake / Golden Cove snapshot of
public API and interleaved competitor timings. Measurement history and
dispatch-threshold experiments are excluded from the public tables.
Prime-field vector multiplication is faster. Mersenne31 AVX2 and AVX-512
multiplies skip re-folding canonical operands, and the AVX-512 product uses a
masked recombination; QuadMersenne31 AVX2 complex products defer reduction
until four partial products are summed. Goldilocks AVX2 addition and
subtraction use fewer compare steps. Outputs remain canonical, and the
raw-destination guarantees of add_assign_scalar and sub_assign_scalar
are unchanged. See BENCHMARKS.md.
bench-m31-comp runs only the five-round public snapshot campaign;
the prime_ntt threshold investigation remains a separate benchmark.
The AVX-512 GF(2^8) matrix kernels (Gf8D and Gf8B, contiguous,
scattered-row, provider, and prepared forms) use direct coefficient reads
for short rows and resolve each row group's coefficients into map words
once per chunk of terms for longer rows, folding terms in pairs. Results
are unchanged.
The GFNI and AVX-512 byte-field matrix kernels, contiguous and
scattered-row, process long rows in column blocks when the destination
spans more than one row group, so each source block is reused from cache
across every row group instead of being re-read from memory per group.
Results are unchanged.
The GFNI byte-field matrix kernels prefetch each source ahead of the tile
loop on long rows whose terms fit in one resolve chunk, and run the column
blocks above only for larger term counts. Results are unchanged.
The GFNI byte-field matrix kernels (Gf8D and Gf8B, contiguous,
scattered-row, provider, and prepared forms) split the destination rows
into the fewest width-balanced row groups of up to six rows, or four with
one or two terms, instead of fixed groups of four, two, and one, so the
sources are streamed once per group and fewer groups run. Overwrite seeds
multi-row groups from the first product rather than from zero. Results are
unchanged. BENCHMARKS.md is refreshed on both hosts for this change.
The GFNI byte-field matrix kernels run a three-row group with three
32-byte lanes per row, folding terms two at a time, when its terms number
from six through one resolve chunk and its rows are cache-resident; other
three-row groups keep two lanes. This covers three-destination calls and
the trailing group of seven-destination calls, contiguous and
scattered-row. Results are unchanged.
Fixed
The Plonky3 competitor harness aligns packed quadratic-extension fixtures
for native AVX-512 builds and reports the actual packing widths.
CI coverage uses just cover, including the portable feature run, and
exports LCOV through just cover-lcov with the same exclusion set. The
AVX-512-only QuadMersenne31 kernel is excluded on incapable coverage
runners; the AVX2 kernel and mixed-ISA dispatch remain included.
NEON and Wasm row-geometry checks compile only on their consumer targets,
rather than appearing as unreachable x86 coverage obligations.
The GFNI and AVX-512 GF(2^8) matrix kernels over a generic Matrix
provider check the length of each source slice they stage, so a provider
that returns a shorter slice than the one the entry validated panics
instead of reading out of bounds.