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 を使用したマルチスレッド CPU パス。オプションのバックエンド(NVPL、FFTW、OpenBLAS、BLIS)も利用可能。
  • ヘッダーのみ – リポジトリを追加して matx::matx をリンクするだけで済み、別途バイナリインストールは不要です。
  • クロスプラットフォーム – Linux は完全対応;Windows はアルファ版。任意の 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 から直接引用;外部の主張は追加されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト