ライブラリの呼び出しのカーネル
GPU Coder™ は、cuBLAS、cuSOLVER、cuFFT、Thrust、cuDNN、TensorRT ライブラリなど、CUDA® GPU 用に最適化されたライブラリをサポートします。
cuBLAS ライブラリは、Basic Linear algebra Subprograms (BLAS) の NVIDIA® CUDA ランタイム上での実装です。NVIDIA GPU の計算リソースにアクセスできるようにします。
cuSOLVER ライブラリは、cuBLAS および cuSPARSE ライブラリに基づく高水準なパッケージです。密な行列用の一般的な行列因数分解ルーチンや三角形行列解法ルーチン、スパース最小二乗ソルバー、固有値ソルバーなど、便利な LAPACK のような機能を提供します。
cuFFT ライブラリは、NVIDIA GPU 上での高速フーリエ変換 (FFT) アルゴリズムの高性能な実装を提供します。cuBLAS、cuSOLVER、および cuFFT ライブラリは NVIDIA CUDA Toolkit に含まれています。
Thrust は CUDA 用の C++ テンプレート ライブラリです。Thrust ライブラリは CUDA Toolkit に付属しており、複雑かつ高性能な並列化アプリケーションを実装するために、sort など、GPU により高速化されたプリミティブを活用できます。
NVIDIA CUDA Deep Neural Network library (cuDNN) は、深層ニューラル ネットワーク向けに GPU により高速化されたプリミティブのライブラリです。cuDNN では、フォワード畳み込み層、バックワード畳み込み層、プーリング層、正規化層、活性化層など、標準ルーチンの高度に調整された実装が提供されます。NVIDIA TensorRT は、高性能な深層学習用推論オプティマイザーおよびランタイム ライブラリです。詳細については、cuDNN を使用した深層学習ネットワークのコード生成とTensorRT を使用した深層学習ネットワークのコード生成を参照してください。
GPU Coder は、ライブラリのカーネル呼び出しを生成するために特殊なプラグマを必要としません。コード生成プロセス中に、GPU Coder アプリで [cuBLAS の有効化] オプションを選択するか、CLI で config_object.GpuConfig.EnableCUBLAS = true
プロパティを使用すると、GPU Coder によって一部の機能が cuBLAS ライブラリの呼び出しに置き換えられます。GPU Coder アプリで [cuSOLVER の有効化] オプションを選択するか、CLI で config_object.GpuConfig.EnableCUSOLVER = true
プロパティを使用すると、GPU Coder によって一部の機能が cuSOLVER ライブラリの呼び出しに置き換えられます。GPU Coder で高度な数学関数をライブラリの呼び出しに置き換えるには、次の条件が満たされていなければなりません。
これらの関数に対する GPU 固有のライブラリの置換が存在しなければならない。
MATLAB® Coder™ のデータ サイズのしきい値を満たさなければならない。
GPU Coder は、次の表に示す関数の cuFFT、cuSOLVER、および cuBLAS ライブラリの置換をサポートします。CUDA の置換先がない関数の場合、GPU Coder は移植可能かつ GPU にマッピングされる MATLAB 関数を使用します。
関数 MATLAB | 説明 | MATLAB Coder LAPACK サポート | cuBLAS、cuSOLVER、cuFFT、Thrust サポート |
---|---|---|---|
| 行列乗算 | あり | あり |
|
| あり | あり |
| 行列の LU 分解 | あり | あり |
| 直交三角分解 | あり | 部分的 |
| 行列式 | あり | あり |
| コレスキー分解 | あり | あり |
| 条件数の逆数 | あり | あり |
| 線形方程式系 | あり | あり |
| 固有値および固有ベクトル | あり | なし |
| Schur 分解 | あり | なし |
| 特異値分解 | あり | 部分的 |
| 高速フーリエ変換 | あり | あり |
| 逆高速フーリエ変換 | あり | あり |
配列要素の並べ替え | あり ( |
GPU Coder アプリで [cuFFT の有効化] オプションを選択するか、CLI で config_object.GpuConfig.EnableCUFFT = true
プロパティを使用すると、GPU Coder は MATLAB コード内の関数 fft,ifft,fft2,ifft2,fftn.ifftn
の呼び出しを対応する cuFFT ライブラリの呼び出しにマッピングします。2 次元以上の変換では、GPU Coder は複数の 1 次元バッチ変換を作成します。これらのバッチ変換は単一の変換よりもパフォーマンスに優れています。GPU Coder はアウトオブプレース変換のみをサポートします。[cuFFT の有効化] が選択されていない場合、GPU Coder は C FFTW
ライブラリを使用する (利用可能な場合) か、移植可能な MATLAB FFT からカーネルを生成します。単精度と倍精度の両方のデータ型がサポートされます。入力および出力には実数値または複素数値を使用できますが、実数値変換の方が高速になります。cuFFT ライブラリでは、通常、2 のべき乗として指定されるか、小さな素数の積へと因数分解できる値として指定される入力サイズがサポートされます。一般に、素因数を小さくするほど、パフォーマンスが向上します。
メモ
cufft
、cublas
、cudnn
などの CUDA ライブラリ名を MATLAB 関数の名前として使用するとコード生成エラーになります。
参考
coder.gpu.kernel
| coder.gpu.kernelfun
| gpucoder.matrixMatrixKernel
| coder.gpu.constantMemory
| gpucoder.stencilKernel
| gpucoder.sort