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개 주요 프로그래밍 언어에 대한 네이티브 지원이 있습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트