このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,matlabコ,ドを複数のgpuで並列に実行する方法を説明します。まずロ,カルマシンで実行し,次にクラスタ,にスケ,ルアップします。この例では,サンプル問題としてロジスティックマップ(人口の増加をモデル化した方程式)を使用します。
MATLABの増加し続ける機能により,マルチGPUサポートなど,追加コーディングの一切不要な自動並列サポートが提供されています。詳細にいては,自動並列サポトを使用したmatlab関数の実行を参照してください。たとえば,関数trainNetwork
はニュ,ラルネットワ,クの学習および推論用のマルチgpu,サポ,トを提供しています。詳細にいては,並列およびクラウドでの深層学習のスケ,ルアップ(深度学习工具箱)を参照してください。
単一のgpu上で計算を実行するには,gpuArray
オブジェクトをgpu対応matlab関数の入力として使用します。Gpu対応関数の詳細にいては,Gpuでのmatlab関数の実行を参照してください。
増加率r
、人口x
のgpuArrayを作成します。gpuArrayの作成の詳細については、Gpuでの配列の確立を参照してください。
N = 1000;r = gpuArray.linspace(0,4,N);x = rand(1,N,“gpuArray”);
単純なアルゴリズムを使用してロジスティックマップを反復します。このアルゴリズムではGPU対応の演算子をgpuArrayに使用しているため,計算はGPU上で実行されます。
numIterations = 1000;为n=1:numIterations x = r.*x.*(1-x);结束
計算の完了後,人口に対して増加率をプロットします。
情节(r, x,“。”);
さらに高いパフォーマンスが必要な場合,gpuArrayはいくつかのオプションをサポートしています。そのリストにいては,関数gpuArray
のペ,ジを参照してください。たとえば,この例のアルゴリズムは gpuArray の要素単位の演算のみを行っているため、関数arrayfun
を使用してgpu用にそれらの演算をプリコンパ显卡ルすることができます。
parfor
による複数のgpuの使用parfor
ル,プを使用して为
ル,プの反復を複数の並列ワ,カ,に分散できます。計算でgpu対応関数を使用している場合,計算はワ,カ,のgpuで実行されます。たとえば,モンテカルロ法を使用して人口の変化をランダムにシミュレートする場合、シミュレーションはparfor
ルプを使用して複数のgpuで並列に計算されます。
使用可能なgpuと同じ数のワカをも並列プルを作成します。使用可能なgpuの数を調べるには,関数gpuDeviceCount
を使用します。既定で,MATLABは最高のパフォーマンスを得るために各ワーカーに異なるGPUを割り当てます。並列プルにおけるgpuの選択の詳細にいては,並列プルにおける複数のgpuの使用を参照してください。
numgpu = gpuDeviceCount(“可用”);parpool (numGPUs);
使用“本地”配置文件启动并行池(parpool)…连接2个工人。
シミュレーション回数を定義し,各シミュレーションの人口ベクトルを格納する配列をGPU内に作成します。
numSimulations = 100;X = 0 (numSimulations,N,“gpuArray”);
parfor
ル,プを使用して,プ,ル内のワ,カ,にシミュレ,ションを分散します。ループ内のコードにより初期の人口のランダムなgpuArrayが作成され,それに対してロジスティックマップが反復されます。このコードはGPU対応の演算子をgpuArrayに使用するため,計算は自動的にワーカーのGPUで実行されます。
parforX(i,:) = rand(1,N,“gpuArray”);为n=1: X(i,:) = r.*X(i,:).*(1-X(i,:));结束结束
計算の完了後,すべてのシミュレ,ションの結果をプロットします。それぞれの色は異なるシミュレ,ションを表します。
图绘制(r, X,“。”);
計算をさらに細かく制御する必要がある場合は,より高度な並列機能を使用できます。たとえば,parallel.pool.DataQueue
を使用して計算中にワ,カ,からデ,タを送信できます。例は,Parforを使用したパラメタスプ中のプロットを参照してください。
再現可能な一連の乱数を発生させる場合は,ワ,カ,gpuでの乱数発生を制御できます。詳細にいては,ワ,カ,上の乱数ストリ,ムの制御を参照してください。
parfeval
による複数gpuの非同期の使用parfeval
を使用すると,並列プ,ルワ,カ,で計算を非同期で実行できます。計算でgpu対応関数を使用している場合,計算はワ,カ,のgpuで実行されます。たとえば,複数の GPU 上でモンテカルロ シミュレーションを非同期で実行することができます。
ワ,カ,での計算完了後の計算結果を保持するために,未来オブジェクトを使用します。各シミュレ,ションの結果用に未来オブジェクトの配列を事前に割り当てます。
f(numSimulations) = parallel.FevalFuture;
parfeval
を使用して計算を実行するには,それらを関数内に配置しなければなりません。たとえば,myParallelFcn
には単一のシミュレ,ションのコ,ドが含まれています。
类型myParallelFcn
函数x = myParallelFcn(r) N = 1000;x = gpuArray.rand(1,N);numIterations = 1000;n=1:numIterations x = r.*x.*(1-x);结束结束
为
ル,プを使用してシミュレ,ションをル,プし,parfeval
を使用して並列プ,ル内のワ,カ,でシミュレ,ションを非同期で実行します。myParallelFcn
はGPU対応関数をgpuArrayに使用するため,それらの関数はワーカーのGPUで実行されます。parfeval
は計算を非同期で実行するため,matlabはブロックされず,計算の実行中も作業を続行できます。
为i=1:numSimulations f(i) = parfeval(@myParallelFcn,1,r);结束
結果の準備ができたときにparfeval
から結果を収集するには,未来オブジェクトに対してfetchOutputs
またはfetchNext
を実行します。また,afterEach
または毕竟
を使用して,結果の準備ができたときに自動的に結果に対して関数を呼び出すこともできます。たとえば,各シミュレーションの完了直後にその結果をプロットするには、Future オブジェクトに対してafterEach
を使用します。それぞれの色は異なるシミュレ,ションを表します。
图保存在afterEach (f, @ (x)情节(r, x,“。”), 0);
複数のgpuをもクラスタを使用できる場合は,計算をスケルアップすることができます。関数parpool
を使用して,クラスタ,上の並列プ,ルを起動します。これにより,parfor
ル,プ,parfeval
などの並列機能がクラスタ,ワ,カ,で実行されます。計算でgpuArrayにGPU対応関数を使用する場合,これらの関数はクラスターワーカーのGPUで実行されます。クラスタ上での並列機能の実行の詳細にいては,デスクトップからクラスタ,へのスケ,ルアップを参照してください。
gpuArray
|gpuDevice
|parpool
|parfor
|parfeval
|fetchOutputs (FevalFuture)
|afterEach