NVIDIA/MatX

An efficient C++20 GPU numerical computing library with Python-like syntax

NVIDIA / MatX – C++에서 빠르고 NumPy 스타일의 텐서 계산

무엇인가요 – MatX는 헤더 전용 C++20 라이브러리로, NumPy와 유사한 배열 코드(텐서, 브로드캐스트, 축소, FFT, 선형대수, 난수 등)를 작성하면서도 실행 모델에 대한 완전한 제어를 유지할 수 있게 해줍니다. 동일한 표현식은 실행자(executor) 를 교체하기만 하면 NVIDIA GPU, 멀티코어 CPU, 또는 JIT 생성된 융합 커널에서 실행할 수 있습니다.

왜 중요한가요 – GPU 가속 수치 계산은 일반적으로 수작업으로 작성한 CUDA 커널이나 별도의 라이브러리 호출(cuBLAS, cuFFT, cuRAND 등)을 필요로 합니다. MatX는 이러한 복잡한 부분을 숨깁니다: 지연된 표현식을 구성한 후 라이브러리가 기존 CUDA 라이브러리를 호출하거나 전체 파이프라인을 융합한 단일 커널을 생성하도록 합니다. README에서는 이로 인해 구현 코드가 90% 이상 감소하고, 수작업 최적화된 CUDA + cuFFT 워크플로우보다 1.5~2배 빠른 성능을 달성할 수 있음을 보여줍니다.

주요 기능

  • NumPy 스타일 API – make_tensor, 브로드캐스트, 슬라이싱, 요소 단위 연산, matmul, fft, tanh 등
  • 지연된 표현식 그래프 – 연산은 기록되며 .run(executor)가 호출될 때만 실체화됩니다.
  • 다양한 실행자
    • cudaExecutor – 각 연산을 적절한 CUDA 라이브러리로 실행합니다.
    • CUDAJITExecutor – 호환 가능한 연산(cuBLASDx, cuSolverDx, cuFFTDx, cuRANDDx)을 런타임에 생성된 하나의 커널로 융합합니다.
    • AllThreadsHostExecutor – OpenMP를 사용한 멀티스레드 CPU 경로이며, 선택적 백엔드(NVPL, FFTW, OpenBLAS, BLIS)도 지원합니다.
  • 헤더 전용 – 리포지토리만 추가하고 matx::matx를 링크하면 되며, 별도의 바이너리 설치가 필요 없습니다.
  • 크로스 플랫폼 – Linux는 완전 지원; Windows는 알파 버전. 어떤 C++20 컴파일러와 CUDA 툴킷과도 호환됩니다.
  • 성능 비교 – FFT 파이프라인은 융합 시 1.61배 빠르며, 같은 GPU에서 Black-Scholes 가격 산정은 NumPy보다 184배 빠릅니다.

일반적인 워크플로우

#include <matx.h>
auto x = matx::make_tensor<float>({1024,256});
auto w = matx::make_tensor<float>({256,128});
auto b = matx::make_tensor<float>({128});
auto y = matx::tanh(matx::matmul(x,w) + b);
(y = y).run(matx::cudaExecutor{});   // 또는 CUDAJITExecutor{}, 또는 호스트 실행자

코드는 일반적인 NumPy처럼 보이지만, 라이브러리는 별도의 커널을 시작할지, cuBLAS을 호출할지, 또는 융합 커널을 생성할지 결정합니다.

시작하기 – 리포지토리를 클론하고 -DMATX_BUILD_EXAMPLES=ON을 활성화한 후 인터페이스 타겟을 링크합니다. 프로젝트는 Conan을 통해 제공되어 패키지 관리가 간편합니다.

커뮤니티 및 지원 – GitHub에서의 논의, 버그/기능 요청을 위한 이슈 트래커, BSD-3-Clause 라이선스, 세미틱 버전 관리.


모든 문장은 리포지토리의 README에서 직접 인용되었으며, 외부 주장은 추가되지 않았습니다.

관련

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