ashvardanian/NumKong
SIMD-accelerated distances, dot products, matrix ops, geospatial & geometric kernels for 16 numeric types — from 6-bit floats to 64-bit complex — across x86, Arm, RISC-V, and WASM, with bindings for Python, Rust, C, C++, Swift, JS, and Go 📐
解决的问题
NumKong 是一个可移植的混合精度数学和线性代数库,旨在消除标准 BLAS 库中常见的“静默溢出”和数值不稳定性。它提供高性能的 SIMD 内核,将结果提升到更宽的累加器(例如 Int8 → Int32),以确保结果保持在有效范围内,同时相比 PyTorch 或 NumPy 等替代方案,显著减小了二进制体积。
工作原理
该库在 x86、Arm、RISC-V、LoongArch、Power 和 WebAssembly 等 30 多个后端上实现了 2,000 多个 SIMD 内核。它利用 AMX 和 SME 等硬件特定功能,并支持 15 种以上的数值类型,从 4 位整数到 128 位复数。
关键设计选择包括:
- 避免循环展开:依赖现代 CPU 硬件处理乱序执行和寄存器重命名,以保持较小的二进制体积并避免指令缓存压力。
- 无线程依赖设计:不管理自己的线程池,而是公开行范围参数,使开发者可以将其集成到任何并行模型(例如 Python 的
concurrent.futures)中,而不会发生线程过度订阅。 - 内存独立性:避免隐藏的内部分配,使其与任意分配器和对齐要求兼容。
适用人群
专为需要在多种语言(C++、Python、Rust、JS、Go、Swift)和平台之间实现高性能、数值稳定线性代数的开发者设计,尤其适用于机器人、边缘 AI 或实时系统领域,其中确定性延迟和小二进制体积至关重要。
主要亮点
- 混合精度支持:支持 17 种数值类型,包括 6 位浮点数等罕见格式。
- 更轻量的体积:二进制大小比其他 BLAS 类似替代方案小 5 到 100 倍。
- 广泛的硬件支持:针对 x86、Arm、RISC-V、LoongArch、Power 和 WebAssembly 进行优化。
- 数值验证:每个内核均与 118 位扩展精度基准进行验证。
- 多语言绑定:原生支持六种主要编程语言。
相关
- 项目
- 项目
- 项目
- 项目
- 项目