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 から直接引用;外部の主張は追加されていません。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト