nmod_mat_mul_u8
#include <flint/nmod_mat.h>void nmod_mat_mul_u8(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B)sourceSets for a modulus (checked only by FLINT_ASSERT) using kernels for entries stored in bytes. may be aliased with or . Uses several threads when available.
For and the entries are packed into bits (one bit per entry for , two bit planes for ) and multiplied by Strassen–Winograd over the packed matrices with leaves computed by the method of four Russians, unless has fewer than 64 (for ) or 192 (for ) rows. For the entries are converted to bytes and multiplied by a kernel that replaces each multiplication by a table lookup within a vector register, under Strassen–Winograd when all dimensions are at least 256. For the products are computed by flint_sgemm on blocks of at most columns of , under Strassen–Winograd on bytes when all dimensions are at least 2048, or by a single flint_sgemm when several threads are available, and .
nmod_mat_mul_u8 multiplies matrices modulo with entries in bytes, replacing multiplications by in-register table lookups for , and with bit-packed Strassen–Winograd and the method of four Russians for and .The FLINT team, “nmod_mat_mul_u8 (nmod_mat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/nmod_mat/nmod_mat_mul_u8.html (generated 2026-11-02).
@misc{flint-doc-nmod-mat-nmod-mat-mul-u8,
author = {{The FLINT team}},
title = {{nmod\_mat\_mul\_u8 (nmod\_mat.h)}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/nmod_mat/nmod_mat_mul_u8.html},
note = {Generated 2026-11-02}
}