このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
GPU 対応関数を使用したマンデルブロ集合の計算
この例では、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 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