GPU での配列の確立
MATLAB® の gpuArray
は GPU に格納される配列を表します。GPU 上の配列をサポートする関数の詳細なリストについては、GPU での MATLAB 関数の実行を参照してください。
既存のデータからの GPU 配列の作成
GPU への配列送信
GPU 配列は、ワークスペースから既存の配列を GPU に転送することによって作成できます。MATLAB から GPU に配列を転送するには、関数 gpuArray
を使用します。
N = 6; M = magic(N); G = gpuArray(M);
これは次の 1 行のコードで実現できます。
G = gpuArray(magic(N));
G
は、GPU に格納されている魔方陣を表す MATLAB gpuArray
オブジェクトとなります。gpuArray
への入力は、数値 (例: single
、double
、int8
など) または論理値でなければなりません (GPU 上での複素数の処理も参照)。
GPU からの配列の取得
GPU から MATLAB ワークスペースに配列を取得するには、関数 gather
を使用します。これにより、gpuArray
オブジェクトで表される GPU 上の配列を取得し、それを通常の MATLAB 配列として MATLAB ワークスペースに転送します。isequal
を使用すると、正しい値を取得したことを確認できます。
G = gpuArray(ones(100,'uint32')); D = gather(G); OK = isequal(D,ones(100,'uint32'))
CPU への収集は高コストの可能性があるため、gpuArray
をサポートしていない関数で結果を処理する必要がある場合を除いて、一般的に収集は不要です。
例: GPU への配列の転送
MATLAB で 1000 行 1000 列の乱数行列を作成し、GPU に転送します。
X = rand(1000); G = gpuArray(X);
例: 指定した精度での配列の転送
MATLAB で倍精度の乱数値からなる行列を作成し、単精度として MATLAB から GPU に転送します。
X = rand(1000); G = gpuArray(single(X));
GPU 配列の直接作成
いくつかの関数では、入力引数として 'gpuArray'
タイプを指定することで、直接 GPU 上に配列を作成できます。これらの関数では配列のサイズとデータ クラスの情報のみが必要とされ、MATLAB ワークスペースから要素を転送することなく配列を作成できます。詳細については、gpuArray
を参照してください。
例: GPU での単位行列の作成
GPU に int32
型の 1024 行 1024 列の単位行列を作成するには、以下を入力します。
II = eye(1024,'int32','gpuArray'); size(II)
1024 1024
1 つの数値引数により、2 次元行列が作成されます。
例: GPU での多次元配列の作成
GPU にデータ クラス double
の 1 からなる 3 次元配列を作成するには、以下を入力します。
G = ones(100,100,50,'gpuArray');
size(G)
100 100 50
underlyingType(G)
double
データの既定のクラスは double
であるため、指定する必要はありません。
例: GPU でのベクトルの作成
GPU にゼロからなる 8192 成分の列ベクトルを作成するには、以下を入力します。
Z = zeros(8192,1,'gpuArray');
size(Z)
8192 1
列ベクトルでは、2 番目の次元のサイズは 1 です。
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 ファイルとして保存することができます。gpuArray
を MATLAB ワークスペースから保存する場合、データは MAT ファイルに gpuArray
変数として保存されます。gpuArray
変数が含まれる MAT ファイルを読み込むと、データは gpuArray
として GPU に読み込まれます。
メモ
GPU を使用できない場合は、gpuArray
データが含まれる MAT ファイルをインメモリ配列として読み込むことができます。GPU なしで読み込まれた gpuArray
には制限があり、計算には使用できません。GPU なしで読み込まれた gpuArray
を使用するには、gather
を使用して内容を取得します。
MATLAB ワークスペースで変数を保存し読み込む方法の詳細については、ワークスペース変数の保存と読み込みを参照してください。