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에서 직접 인용되었으며, 외부 주장은 추가되지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트