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
、eye
、true
、false
、cast
、rand
、randi
、randn
があります。
GPU での単位行列の作成
GPU に int32
型の 1024 行 1024 列の単位行列を作成します。
II = eye(1024,"int32","gpuArray"); size(II)
1024 1024
GPU での多次元配列の作成
GPU に double
データ型の 1 からなる 3 次元配列を作成します。
G = ones(100,100,50,"gpuArray");
size(G)
100 100 50
underlyingType(G)
double
GPU でのベクトルの作成
GPU にゼロからなる 8192 成分の列ベクトルを作成します。
Z = zeros(8192,1,"gpuArray");
size(Z)
8192 1
GPU でのプロトタイプ配列に基づく配列の作成
プロトタイプ配列と同じデータ型の 100 行 100 列の乱数配列を作成します。
G = gpuArray([1 2 3]); R = rand(100,like=G);
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 ワークスペースで変数を保存し読み込む方法の詳細については、ワークスペース変数の保存と読み込みを参照してください。