最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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 への入力は、数値 (例: singledoubleint8 など) または論理値でなければなりません (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
classUnderlying(G)
double

データの既定のクラスは double であるため、指定する必要はありません。

例: GPU でのベクトルの作成

GPU にゼロからなる 8192 成分の列ベクトルを作成するには、以下を入力します。

Z = zeros(8192,1,'gpuArray');
size(Z)
        8192           1

列ベクトルでは、2 番目の次元のサイズは 1 です。

gpuArray の特性の調査

gpuArray オブジェクトの特性を調べるいくつかの関数があります。

関数説明
classUnderlying配列の基になるデータのクラス
existsOnGPU配列が GPU に存在してアクセス可能かどうかの指標
isreal配列データが実数かどうかの指標
isaUnderlying

tall 配列のデータが、gpuArray などの指定されたクラスかどうかを判別

isequal2 つ以上の配列が等しいかどうかを判別
isnumeric配列が数値データ型であるかどうかを判別
issparse配列がスパースであるかどうかを判別
lengthベクトルの長さまたは最大の配列次元
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 ワークスペースで変数を保存し読み込む方法の詳細については、ワークスペース変数の保存と読み込み (MATLAB)を参照してください。

参考

関連するトピック