NVIDIA/MatX

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

NVIDIA / MatX – C++ 中的快速 NumPy 风格张量计算

是什么 – MatX 是一个仅头文件的 C++20 库,允许您编写类似 NumPy 的数组代码(张量、广播、归约、FFT、线性代数、随机数等),同时保持对执行模型的完全控制。通过更换 执行器,相同的表达式可以在 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 和可选后端(NVPL、FFTW、OpenBLAS、BLIS)的多线程 CPU 路径。
  • 仅头文件 – 只需添加仓库并链接 matx::matx;无需单独的二进制安装。
  • 跨平台 – Linux 完全支持;Windows 处于 alpha 阶段。与任何 C++20 编译器和 CUDA Toolkit 兼容。
  • 基准测试 – FFT 流水线融合后运行速度提升 1.61 倍;Black-Scholes 定价在相同 GPU 上比 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;未添加任何外部声明。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目