Repolode
ashvardanian

ashvardanian/NumKong

Kernels matemáticos acelerados por SIMD para distâncias, produtos escalares e operações com matrizes em mais de 15 tipos numéricos, com bindings para Python, Rust, C/C++, JS, Swift e Go.

Estrelas
1,907
Forks
142
Issues abertas
59
Último commit
há 6 dias

O que é?

NumKong é uma biblioteca numérica para operações com vetores e matrizes, como produtos escalares, métricas de distância e similaridade e multiplicação de matrizes. Seus kernels são ajustados manualmente com SIMD para x86, Arm, RISC-V, LoongArch, Power e WebAssembly, e abrangem tipos numéricos que vão de inteiros de 4 bits e floats de 6 bits a números complexos de 128 bits. Produtos escalares e reduções relacionadas acumulam valores em tipos mais largos, como Float16 para Float32 ou Int8 para Int32, para evitar que os resultados estourem silenciosamente.

A biblioteca é escrita em C e oferece bindings para Python, Rust, C++, JavaScript, Swift e Go. Ela não gerencia threads nem memória: quem a utiliza fornece seu próprio modelo de threading e buffers, e as APIs de matrizes compactadas permitem preparar os pesos uma vez e reutilizá-los em várias consultas. O projeto documenta sua precisão em comparação com referências de precisão estendida e relata um tamanho de binário muito menor que o de várias alternativas no estilo BLAS.

NumKong é adequado para busca e recuperação vetorial, cálculo de similaridade entre embeddings, computação científica que exige soma compensada e cargas de inferência de baixa precisão que usam mini-float ou tipos inteiros.

Recursos principais

  • 01Oferece kernels SIMD para produtos escalares, métricas de distância e multiplicação de matrizes nos principais alvos de CPU e WASM.
  • 02Suporta mais de 15 tipos numéricos, incluindo inteiros de 4 bits, floats de 6 e 8 bits, Float16, BFloat16 e números complexos.
  • 03Acumula valores em tipos mais largos para evitar overflow e usa soma compensada para Float64.
  • 04Oferece bindings para Python, Rust, C/C++, JavaScript, Swift e Go.
  • 05Deixa o gerenciamento de threads e a alocação de memória a cargo de quem usa a biblioteca, permitindo trabalhar com qualquer modelo de paralelismo ou alocador.
  • 06Oferece APIs de matrizes compactadas que preparam os dados uma vez para consultas repetidas.

Casos de uso

  • Calcular similaridade por cosseno ou distância euclidiana entre grandes conjuntos de embeddings para busca vetorial.
  • Executar kernels de inferência de baixa precisão com dados Float8, Float16 ou Int8.
  • Incorporar cálculos rápidos de distância a uma aplicação Python ou Rust sem adicionar uma stack BLAS grande.
  • Executar kernels numéricos em navegadores ou no Node.js por meio do binding para JavaScript.

Tópicos

#simd#linear-algebra#vector-search#matrix-multiplication#blas#mixed-precision#distance-metrics#arm-neon#assembly#cpp

Perguntas frequentes

O que é NumKong?
Kernels matemáticos acelerados por SIMD para distâncias, produtos escalares e operações com matrizes em mais de 15 tipos numéricos, com bindings para Python, Rust, C/C++, JS, Swift e Go. NumKong é uma biblioteca numérica para operações com vetores e matrizes, como produtos escalares, métricas de distância e similaridade e multiplicação de matrizes. Seus kernels são ajustados manualmente com SIMD para x86, Arm, RISC-V, LoongArch, Power e WebAssembly, e abrangem tipos numéricos que vão de inteiros de 4 bits e floats de 6 bits a números complexos de 128 bits. Produtos escalares e reduções relacionadas acumulam valores em tipos mais largos, como Float16 para Float32 ou Int8 para Int32, para evitar que os resultados estourem silenciosamente.
NumKong é gratuito? Qual é a licença?
NumKong é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
NumKong ainda é mantido?
Manutenção ativa. O último commit de NumKong foi em 31 de out. de 2026.
Para que posso usar NumKong?
Calcular similaridade por cosseno ou distância euclidiana entre grandes conjuntos de embeddings para busca vetorial. Executar kernels de inferência de baixa precisão com dados Float8, Float16 ou Int8. Incorporar cálculos rápidos de distância a uma aplicação Python ou Rust sem adicionar uma stack BLAS grande. Executar kernels numéricos em navegadores ou no Node.js por meio do binding para JavaScript.
Onde consigo NumKong?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/ashvardanian/NumKong

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados