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 ライブラリで一般的な「静黙のオーバーフロー」や数値不安定性を排除するように設計された、ポータブルで混合精度の数学および線形代数ライブラリです。広い累算器(例:Int8 → Int32)に結果を昇格させる高パフォーマンスな SIMD カーネルを提供し、結果が範囲内に保たれるようにします。同時に、PyTorch や NumPy などの代替品と比べて大幅に小さいバイナリサイズを実現しています。
動作方法
このライブラリは、x86、Arm、RISC-V、LoongArch、Power、WebAssembly に対応する 30 以上のバックエンドで 2,000 以上の SIMD カーネルを実装しています。AMX や SME などのハードウェア固有の機能を活用し、4 ビット整数から 128 ビット複素数まで 15 種類以上の数値型をサポートしています。
主な設計方針は以下の通りです:
- ループアンロールの回避:現代の CPU ハードウェアが順序外実行やレジスタ名前変更を処理するように依存し、バイナリサイズを小さく保ち、命令キャッシュの圧力を回避します。
- スレッド非依存設計:独自のスレッドプールを管理せず、行範囲パラメータを公開することで、開発者が任意の並列モデル(例:Python の
concurrent.futures)に統合できるようにしています。スレッドの過剰割り当てを防ぎます。 - メモリ独立性:内部の隠れた割り当てを回避しており、任意のアロケータやアライメント要件と互換性があります。
対象ユーザー
ロボット工学、エッジAI、リアルタイムシステムなど、決定論的レイテンシと小さなバイナリサイズが重要な分野で、複数の言語(C++、Python、Rust、JS、Go、Swift)とプラットフォームで高パフォーマンスかつ数値的に安定した線形代数を必要とする開発者向けに構築されています。
主な特徴
- 混合精度サポート:6 ビット浮動小数点など、珍しいフォーマットを含む 17 種類の数値型を扱います。
- 軽量なフットプリント:他の BLAS 類似製品と比べて 5~100 倍小さいバイナリサイズです。
- 広範なハードウェア対応:x86、Arm、RISC-V、LoongArch、Power、WebAssembly に最適化されています。
- 数値検証:すべてのカーネルが 118 ビット拡張精度の基準と照合されています。
- マルチ言語バインディング:6 つの主要プログラミング言語のネイティブサポートがあります。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト