ドキュメンテーション

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

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

参考

関連するトピック