GPU での配列の確立
MATLAB® の gpuArray は GPU メモリに格納される配列を表します。GPU 上の配列をサポートする関数の詳細については、GPU での MATLAB 関数の実行を参照してください。
既存のデータからの GPU 配列の作成
GPU への配列送信
GPU 配列は、ホスト メモリから既存の配列を GPU に転送することによって作成できます。関数 gpuArray を使用してホスト メモリから GPU に配列を転送します。
関数 gpuArray は、single、double、int8 などの数値の入力引数と logical の入力引数のみをサポートします。関数 gpuArray は複素数値の入力をサポートします。詳細については、GPU 上での複素数の処理を参照してください。
N = 6; M = magic(N); G = gpuArray(M);
GPU からの配列の取得
GPU からホスト メモリに配列を転送するには、関数 gather を使用します。この関数は、ホスト メモリに格納される通常の MATLAB 配列を返します。isequal を使用して、関数 gather が正しい値を返したことを確認します。
GPU との間でのデータ転送は高コストになる可能性があります。gpuArray をサポートしていない関数で結果を使用する必要がある場合を除いて、一般に gather の呼び出しは不要です。
G = gpuArray(ones(100,"uint32")); D = gather(G); OK = isequal(D,ones(100,"uint32"))
GPU への配列の転送
1000 行 1000 列の乱数行列を作成し、GPU に転送します。GPU での乱数発生の詳細については、GPU 上の乱数ストリームを参照してください。
X = rand(1000); G = gpuArray(X);
GPU の乱数発生の詳細については、GPU 上の乱数ストリームを参照してください。
指定した精度での配列の転送
倍精度の乱数値からなる行列を作成し、その行列を単精度の形式で GPU に転送します。
X = rand(1000); G = gpuArray(single(X));
GPU 配列の直接作成
一部の関数では、入力引数として gpuArray タイプを指定することで、直接 GPU 上に配列を作成できます。これらの関数では配列のサイズとデータ クラスの情報のみが必要とされ、ホスト メモリから要素を転送することなく配列を作成できます。詳細については、gpuArray を参照してください。
また、like 構文を使用して既存の gpuArray のデータ型をミラーリングすることで GPU 上に配列を作成することもできます。一部の関数を使用すると、like=p を入力引数として指定してプロトタイプ配列 p と同じデータ型の配列を作成できます。like 構文をサポートする関数には、zeros、ones、createArray (R2024a 以降)、eye、true、false、rand、randi、randn、cast、eps などがあります。
GPU での単位行列の作成
GPU に int32 型の 1024 行 1024 列の単位行列を作成します。
II = eye(1024,"int32","gpuArray"); size(II)
1024 1024
GPU での多次元配列の作成
GPU に single データ型の 1 からなる 3 次元配列を作成します。
G = ones(100,100,50,"single","gpuArray"); size(G)
100 100 50
underlyingType(G)
'single'
GPU でのベクトルの作成
GPU に double データ型の 0 からなる 8192 成分の列ベクトルを作成します。
Z = zeros(8192,1,"gpuArray");
size(Z)8192 1
GPU でのプロトタイプ配列に基づく配列の作成
プロトタイプ配列と同じデータ型の 100 行 100 列の pi 配列を作成します。
G = gpuArray(single(2)); X = createArray(100,like=G,FillValue=pi); size(X)
100 100
underlyingType(X)
'single'
X(1:5)
3.1416 3.1416 3.1416 3.1416 3.1416
gpuArray の特性の調査
gpuArray オブジェクトの特性を調べるには次の関数を使用します。
| 関数 | 説明 |
|---|---|
underlyingType | 配列の基になるデータのクラス |
existsOnGPU | 配列が GPU に存在してアクセス可能かどうかの指標 |
isreal | 配列データが実数かどうかの指標 |
isUnderlyingType | 基となる配列のデータが、 |
isequal | 2 つ以上の配列が等しいかどうかを判別 |
isnumeric | 配列が数値データ型であるかどうかを判別 |
issparse | 配列がスパースであるかどうかを判別 |
length | ベクトルの長さまたは最大の配列次元 |
mustBeUnderlyingType | 配列に double などの基となる型が指定されているかどうかを検証 |
ndims | 配列における次元の数 |
size | 配列次元のサイズ |
gpuArray オブジェクト G のサイズを調べます。
G = rand(100,"gpuArray");
s = size(G)100 100
gpuArray オブジェクトの保存と読み込み
gpuArray 変数は MAT ファイルとして保存できます。MATLAB で gpuArray を保存すると、データは MAT ファイルに gpuArray 変数として保存されます。MATLAB で gpuArray 変数が含まれる MAT ファイルを読み込むと、データは gpuArray として GPU に読み込まれます。
メモ
GPU を使用できない場合は、gpuArray データが含まれる MAT ファイルをインメモリ配列として読み込むことができます。GPU なしで読み込まれた gpuArray には制限があり、計算には使用できません。GPU なしで読み込まれた gpuArray を使用するには、gather を使用して内容を取得します。
MATLAB ワークスペースで変数を保存し読み込む方法の詳細については、ワークスペース変数の保存と読み込みを参照してください。