Skip to content

fgf 2.1.0

Choose a tag to compare

@nanithefkuc nanithefkuc released this 02 Oct 02:41
· 230 commits to main since this release

Added

  • 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.