Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

GPU 対応関数を使用したマンデルブロ集合の計算

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

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

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

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

x = gpuArray.linspace(xlim(1),xlim(2),gridSize);
y = gpuArray.linspace(ylim(1),ylim(2),gridSize);
whos x y
  Name      Size              Bytes  Class       Attributes

  x         1x1000             8000  gpuArray              
  y         1x1000             8000  gpuArray              

多くの 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

参考

| |

関連する例

詳細