ドキュメンテーション

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

gpuArray

GPU 上に配列を作成する

構文

G = gpuArray(X)

説明

G = gpuArray(X) は配列 X を GPU にコピーし、gpuArray オブジェクトを返します。gpuArray を扱うには、GPU 対応の MATLAB® 関数を使用します。詳細については、GPU での MATLAB 関数の実行を参照してください。GPU から配列を取得する必要がある場合は (GPU をサポートしていない関数を使用する場合など)、関数 gather を使用します。

CPU からのデータの転送を回避するために、GPU 上で直接配列を作成できます。詳細については、GPU 配列の直接作成を参照してください。

パフォーマンスを向上させる必要がある場合、または GPU で関数が使用できない場合、gpuArray は次のオプションをサポートしています。

  1. 純粋に要素単位のコードを gpuArrays でプリコンパイルして実行するには、関数 arrayfun を使用します。詳細については、GPU での要素単位の MATLAB コードの実行を参照してください。

  2. CUDA® C++ で記述された既存の GPU カーネルを実行するには、MATLAB CUDAKernel インターフェイスを使用します。詳細については、GPU での CUDA または PTX コードの実行を参照してください。

  3. CUDA デバイス コードまたはライブラリ呼び出しを含む C++ コードを実行するには、MEX 関数を使用します。詳細については、CUDA コードを含む MEX 関数の実行を参照してください。

  4. MATLAB コードから CUDA コードを生成するには、GPU Coder™ を使用します。詳細については、Getting Started with GPU Coder (GPU Coder)を参照してください。

すべて折りたたむ

この例では、GPU 対応の MATLAB 関数を使用して gpuArray を処理する方法を説明します。関数gpuDeviceを使用して GPU をチェックしてください。

行ベクトルを作成します。GPU に転送して gpuArray を作成するには、関数gpuArrayを使用します。

range = [-15:15 0 -15:15 0 -15:15];
n = gpuArray(range);
whos n
  Name      Size            Bytes  Class       Attributes

  n         1x95                4  gpuArray              

gpuArray を処理するには、GPU 対応の MATLAB 関数を使用します。MATLAB は自動的に計算を GPU で実行します。詳細については、GPU での MATLAB 関数の実行を参照してください。たとえば、diagexpmmodabs、および fliplr を組み合わせて使用します。

E = expm(diag(n,-1)) * expm(diag(n,1));
M = mod(abs(E),2);
F = M + fliplr(M);

次に、結果をプロットします。

imagesc(F);
colormap(flip(gray));

GPU からデータを転送して収集する必要がある場合は、gather を使用します。CPU への収集は高コストの可能性があるため、gpuArray をサポートしていない関数で結果を処理する必要がある場合を除いて、一般的に収集は不要です。

result = gather(F);
whos result
  Name         Size            Bytes  Class     Attributes

  result      96x96            73728  double              

この例では、MATLAB の関数と演算子を gpuArrays と共に使用し、モンテカルロ積分法で関数の積分を計算する方法を説明します。関数gpuDeviceを使用して GPU をチェックしてください。

サンプリングする点数を定義します。関数の領域、つまり x および y 座標の両方の区間 [-1,1] に関数 rand でランダムな点を作成し、その点をサンプリングします。GPU に乱数の配列を直接作成するには、配列引数のタイプとして 'gpuArray' を指定します。詳細については、GPU での配列の確立を参照してください。

n = 1e6;
x = 2*rand(n,1,'gpuArray')-1;
y = 2*rand(n,1,'gpuArray')-1;

被積分関数を定義し、それにモンテカルロ積分の式を使用します。このコードは GPU 対応の関数と演算子を gpuArray に使用するため、計算は自動的に GPU で実行されます。GPU 対応関数の詳細については、GPU での MATLAB 関数の実行を参照してください。

f = x.^2 + y.^2 <= 1;
result = 4*1/n*f'*ones(n,1,'gpuArray')
result =

    3.1444

この例では、GPU 対応の MATLAB 関数を使用して、有名な数学的構成であるマンデルブロ集合を計算する方法を説明します。関数gpuDeviceを使用して GPU をチェックしてください。

パラメーターを定義します。実数部および虚数部のグリッド上にマンデルブロ アルゴリズムが反復されます。次のコードは反復回数、グリッド サイズおよびグリッドの範囲を定義します。

maxIterations = 500;
gridSize = 1000;
xlim = [-0.748766713922161, -0.748766707771757];
ylim = [ 0.123640844894862,  0.123640851045266]; 

関数gpuArrayを使用してデータを GPU に転送し、gpuArray を作成できます。また、GPU 上で直接配列を作成することもできます。gpuArray linspace などのデータ配列を作成するために使用できる多くの関数の GPU バージョンを提供します。詳細については、GPU 配列の直接作成を参照してください。

x = gpuArray.linspace(xlim(1),xlim(2),gridSize);
y = gpuArray.linspace(ylim(1),ylim(2),gridSize);
whos a b

多くの MATLAB 関数が gpuArrays をサポートしています。GPU 対応関数に gpuArray 引数を渡すと、その関数は自動的に GPU で実行されます。詳細については、GPU での MATLAB 関数の実行を参照してください。アルゴリズム用に複素数のグリッドを作成し、結果用に配列 count を作成します。GPU 上でこの配列を直接作成するには、ones 関数を使用し、'gpuArray'. を指定します。

[xGrid,yGrid] = meshgrid(x,y);
z0 = complex(xGrid,yGrid);
count = ones(size(z0),'gpuArray');

次のコードは GPU 対応関数を使用してマンデルブロ アルゴリズムを実装しています。このコードは gpuArray を使用しているため、計算は GPU で実行されます。

z = z0;
for n = 0:maxIterations
    z = z.*z + z0;
    inside = abs(z) <= 2;
    count = count + inside;
end
count = log(count);

計算の終了後に結果をプロットします。

imagesc(x,y,count)
colormap([jet();flipud(jet());0 0 0]);
axis off

入力引数

すべて折りたたむ

配列。GPU に転送する数値配列または logical 配列として指定します。GPU デバイスには、データを保存するために十分な空きメモリがなければなりません。X が既に gpuArray の場合、gpuArrayX を変更せずにそのまま出力します。

例: G = gpuArray(rand(3));

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
複素数のサポート: あり

出力引数

すべて折りたたむ

GPU 配列。GPU に保存された配列を表す gpuArray オブジェクトとして返されます。数百もの GPU 対応 MATLAB 関数で gpuArray オブジェクトを使用します。詳細については、GPU での MATLAB 関数の実行を参照してください。GPU から配列を取得するには、関数 gather を使用します。

gpuArray の最大要素数は intmax('int32') に制限されています。

例: G = gpuArray([1 2; 2 4]);

データ型: gpuArray

R2010b で導入