このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
GPU での MATLAB 関数の実行
MATLAB® 関数を GPU で実行してコードを高速化できます。MATLAB での GPU 計算には Parallel Computing Toolbox™ が必要です。
gpuArray
引数をもつ MATLAB 関数
MATLAB および他のツールボックスの多くの関数は gpuArray
データ引数を渡すことで自動的に GPU で実行されます。MATLAB の gpuArray
は GPU に格納される配列を表します。
A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]); e = eig(A);
少なくとも 1 つの gpuArray
をデータ入力引数としてこれらの関数を呼び出すたびに、その関数が GPU で実行されます。関数は、ローカル ワークスペースに数値データを返す方が適切である場合 (例: size
) を除き、結果として gpuArray
を生成します。同じ関数呼び出しで gpuArray
データとホスト メモリに格納された配列の両方を使用して、入力を混在させることができます。gpuArray
対応の関数には、離散フーリエ変換 (fft
)、行列乗算 (mtimes
)、行列の左除算 (mldivide
)、および他の数百の関数があります。
gpuArray
入力の条件
GPU 対応関数は、入力データが GPU にある場合にのみ GPU で実行されます。次元やインデックスなどのパラメーター引数のデータ型は、関数が実行される場所に影響しません。たとえば、次のコードの関数 sum
は、データ (最初の入力) が GPU にあるため GPU で実行されます。
A = rand(10); d = 2; sum(gpuArray(A),d);
sum
は、データ (最初の入力) が GPU にないため GPU で実行されません。A = rand(10); d = 2; sum(A,gpuArray(d));
GPU 上での複素数の処理
GPU で実行される関数の出力が複素数になる可能性がある場合は、明示的に入力引数を複素数として指定しなければなりません。詳細については、GPU 上での複素数の処理を参照してください。
GPU 上でのスパース配列の処理
関数 sparse
を使用してスパースな gpuArray
オブジェクトを作成できます。多くの MATLAB 関数はスパースな gpuArray
オブジェクトをサポートします。詳細については、GPU 上でのスパース配列の処理を参照してください。
gpuArray
をサポートする関数の確認
複数の MATLAB ツールボックスに、gpuArray
をサポートする関数が含まれています。これらのツールボックスに含まれる、gpuArray
オブジェクトをサポートするすべての関数のリストを表示するには、次の表のリンクを使用してください。リスト内にある情報インジケーター付きの関数には、関数を GPU 上で実行する場合に固有の制限または使用に関するメモがあります。使用に関するメモと制限は、関数のリファレンス ページの「拡張機能」の節で確認できます。個々の gpuArray
対応関数の更新の詳細については、リリース ノートを参照してください。
ツールボックス名 | gpuArray をサポートする関数のリスト | GPU 固有のドキュメンテーション |
---|---|---|
MATLAB | gpuArray をサポートする関数 | |
Statistics and Machine Learning Toolbox™ | gpuArray をサポートする関数 (Statistics and Machine Learning Toolbox) | GPU でのデータの解析とモデル化 (Statistics and Machine Learning Toolbox) |
Image Processing Toolbox™ | gpuArray をサポートする関数 (Image Processing Toolbox) | GPU コンピューティング (Image Processing Toolbox) |
Deep Learning Toolbox™ |
*(GPU を使用した深層学習も参照) | Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox) MATLAB による複数の GPU での深層学習 (Deep Learning Toolbox) |
Computer Vision Toolbox™ | gpuArray をサポートする関数 (Computer Vision Toolbox) | GPU コード生成と高速化 (Computer Vision Toolbox) |
Communications Toolbox™ | gpuArray をサポートする関数 (Communications Toolbox) | コード生成と高速化のサポート (Communications Toolbox) |
Signal Processing Toolbox™ | gpuArray をサポートする関数 (Signal Processing Toolbox) | コード生成と GPU サポート (Signal Processing Toolbox) |
Audio Toolbox™ | gpuArray をサポートする関数 (Audio Toolbox) | Code Generation and GPU Support (Audio Toolbox) |
Wavelet Toolbox™ | gpuArray をサポートする関数 (Wavelet Toolbox) | コード生成と GPU サポート (Wavelet Toolbox) |
Curve Fitting Toolbox™ | gpuArray をサポートする関数 (Curve Fitting Toolbox) |
すべての MathWorks® 製品の gpuArray
をサポートする関数のリストについては、gpuArray
をサポートする関数を参照してください。あるいは、製品別にフィルター処理できます。[ヘルプ] バーで [関数] をクリックします。関数リストの左ペインを参照し、MATLAB などの製品を選択します。左ペイン下部で、[GPU 配列] を選択します。gpuArray
対応の関数のない製品を選択した場合、[GPU 配列] フィルターは使用できません。
GPU を使用した深層学習
Deep Learning Toolbox の多くの関数では、サポートされる GPU と Parallel Computing Toolbox があれば、GPU が自動的にサポートされます。データを gpuArray
に変換する必要はありません。以下は、GPU (使用できる場合) で既定で実行される一部の関数のリストです。
trainNetwork
(Deep Learning Toolbox)predict
(Deep Learning Toolbox)predictAndUpdateState
(Deep Learning Toolbox)classify
(Deep Learning Toolbox)classifyAndUpdateState
(Deep Learning Toolbox)activations
(Deep Learning Toolbox)
Deep Learning Toolbox での自動 GPU サポートの詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox)を参照してください。
dlnetwork
(Deep Learning Toolbox) オブジェクトまたはモデル関数として定義されたネットワークを使用するネットワークおよびワークフローでは、データを gpuArray
に変換してください。GPU でカスタムの学習ループまたは推論を実行するには、gpuArray
をサポートする関数 (Deep Learning Toolbox)を使用してください。
GPU のチェックまたは選択
サポートされる GPU がある場合、MATLAB は自動的に GPU での計算に使用します。複数の GPU がある場合は、gpuDeviceTable
を使用して、システムで検出されたすべての GPU のプロパティを調べることができます。gpuDevice
を使用してその 1 つを選択するか、並列プールで複数の GPU を使用することができます。詳細については、GPU デバイスの識別と選択および複数の GPU での MATLAB 関数の実行を参照してください。GPU がサポートされていることをチェックするには、GPU 計算の要件を参照してください。
gpuDeviceTable
Index Name ComputeCapability DeviceAvailable DeviceSelected _____ __________________ _________________ _______________ ______________ 1 "NVIDIA RTX A5000" "8.6" true true 2 "Quadro P620" "6.1" true false
あるいは、利用できる GPU デバイスの数を判別し、デバイスのプロパティのいくつかを検査して、MATLAB® デスクトップから使用するデバイスを選択することもできます。[ホーム] タブの [環境] 領域で、[並列] 、 [GPU 環境の選択] を選択します。
GPU での MATLAB 関数の使用
この例では、gpuArray
対応の MATLAB 関数を使用して gpuArray
オブジェクトを処理する方法を説明します。関数gpuDevice
を使用して GPU のプロパティをチェックできます。
gpuDevice
ans = CUDADevice with properties: Name: 'Quadro P620' Index: 2 ComputeCapability: '6.1' SupportsDouble: 1 GraphicsDriverVersion: '511.79' DriverModel: 'WDDM' ToolkitVersion: 11.2000 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 (49.15 KB) MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 2147287040 (2.15 GB) AvailableMemory: 1615209678 (1.62 GB) CachePolicy: 'balanced' MultiprocessorCount: 4 ClockRateKHz: 1354000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 DeviceSupported: 1 DeviceAvailable: 1 DeviceSelected: 1
-15 ~ 15 の値を繰り返す行ベクトルを作成します。これを GPU に転送して gpuArray
オブジェクトを作成するには、関数gpuArray
を使用します。
X = [-15:15 0 -15:15 0 -15:15];
gpuX = gpuArray(X);
whos gpuX
Name Size Bytes Class Attributes gpuX 1x95 760 gpuArray
gpuArray
オブジェクトを処理するには、任意の gpuArray
対応の MATLAB 関数を使用します。MATLAB は自動的に計算を GPU で実行します。詳細については、GPU での MATLAB 関数の実行を参照してください。たとえば、diag
、expm
、mod
、round
、abs
、fliplr
を一緒に使用します。
gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1)); gpuM = mod(round(abs(gpuE)),2); gpuF = gpuM + fliplr(gpuM);
結果をプロットします。
imagesc(gpuF); colormap(flip(gray));
GPU からデータを転送して収集する必要がある場合は、gather
を使用します。CPU へと戻すデータ転送は高コストになる可能性があり、gpuArray
をサポートしない関数で結果を利用する必要がある場合を除いて、一般に転送は不要です。
result = gather(gpuF);
whos result
Name Size Bytes Class Attributes result 96x96 73728 double
一般に、コードを CPU と GPU で実行すると、GPU と CPU 間で数値の精度とアルゴリズムが異なっていることから、結果に差異が生じることがあります。CPU および GPU からの解はいずれも、真の解析結果に対し等しく有効な浮動小数点数の近似ですが、計算中に異なる丸め動作が行われています。この例の結果は整数であり、round
により丸め誤差が除去されています。
GPU の使用例
GPU での MATLAB 関数の実行例
以下の例では、サポートされる MATLAB 関数に gpuArray
オブジェクトを渡し、それらの関数を GPU で実行しています。
ツールボックス名 | 例 |
---|---|
MATLAB | |
Image Processing Toolbox |
|
Deep Learning Toolbox |
|
Signal Processing Toolbox |
|
Audio Toolbox | |
Wavelet Toolbox |
|
その他の GPU の使用例
以下の例では、他の自動 GPU サポートを利用しています。
ツールボックス名 | 例 |
---|---|
Deep Learning Toolbox |
|
Communications Toolbox |
|
謝辞
MAGMA は、GPU 高速化を利用する線形代数ルーチンのライブラリです。gpuArray
オブジェクト用として Parallel Computing Toolbox に実装された線形代数関数は、MAGMA を利用して高いパフォーマンスと精度を実現しています。
参考
gpuArray
| gpuDevice
| gpuDeviceTable
| canUseGPU