140 releases

new 0.21.12 Apr 10, 2025
0.21.11 Mar 19, 2025
0.21.10 Feb 21, 2025
0.21.8 Dec 5, 2024
0.2.9 Mar 28, 2019

#1508 in Machine learning

Download history 2328/week @ 2024-12-19 1437/week @ 2024-12-26 4101/week @ 2025-01-02 3690/week @ 2025-01-09 4748/week @ 2025-01-16 4993/week @ 2025-01-23 6476/week @ 2025-01-30 3915/week @ 2025-02-06 5166/week @ 2025-02-13 3368/week @ 2025-02-20 4435/week @ 2025-02-27 5035/week @ 2025-03-06 5278/week @ 2025-03-13 6312/week @ 2025-03-20 7201/week @ 2025-03-27 8140/week @ 2025-04-03

27,604 downloads per month
Used in 38 crates (2 directly)

MIT/Apache

1MB
27K SLoC

Rust 18K SLoC // 0.0% comments Templ 9K SLoC // 0.1% comments GNU Style Assembly 13 SLoC // 0.3% comments

tract-linalg

linalg stands for "linear algebra". This is a misnamer. This crates contains low-level, architecture dependant optimisations used by tract-core.

Functions

  • MatMatMul: Extended matrix*matrix product:
    • inspired by Gotoblass and BLIS micro kernel approach
    • extended for convolution friendly addressing (fused img2col)
    • fused output pipeline (min, max, and a few more simple, fast ops)
    • f32*f32 -> f32 (à la sgemm)
    • i8*i8 -> i32 accumulator -> i32 storage
    • i8*i8 -> i32 accumulator -> i8 (with channel zeropoint and scale, and re-quantization pipeline)
  • f32 sigmoid and f32 tanh: at f32 precision, by a rationale function (no exponentiation)
  • byte-to-byte lookup table

Implementations

generic fallback armv6, vfp armv7 neon armv8 simd x64 FMA
MatMatMul f32 4x4 8x4 8x8 16x6
MatMatMul i8->i8 8x4 8x8
MatMatMul i8->i32 8x8
sigmoid f32 4n 4n
tanh f32 4n 4n
byte lookup

Dependencies

~9–18MB
~228K SLoC