このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,ローカルマシンで並列MATLAB®コードを開発し,クラスターにスケールアップする方法を説明します。クラスターは,計算を高速化して分散するためのより多くの計算リソースを提供します。ローカルマシンで対話的にコードを並列で実行してから,コードを変更せずにクラスターでも同様に実行できます。ローカルマシンでのコードのプロトタイプの作成完了後,バッチジョブを使用して計算をクラスターにオフロードできます。これにより,MATLABを閉じて,結果を後で取得することができます。
ローカルマシンでアルゴリズムのプロトタイプを作成することから始めます。この例ではサンプル問題として整数の因数分解を使用します。これは,数の絶対値と共に因数分解の複雑度が高くなる計算量の多い問題です。シンプルなアルゴリズムを使用して整数の数列を因数分解します。
64年ビットの精度で素数のベクトルを作成し,素数のペアをランダムに乗算して大きな合成数を取得します。各因数分解の結果を保存する配列を作成します。この例の以降の各節にあるコードの実行には20分以上かかる場合があります。高速化するには,使用する素数の数を減らして(2 ^ 19.
など)负荷を軽减します。2 ^ 21.
を指定して実行し,最適な最終プロットを表示します。
primeNumbers =质数(uint64 (2 ^ 21));compositeNumbers = primeNumbers。* primeNumbers (randperm(元素个数(primeNumbers)));因素= 0(元素个数(primeNumbers), 2);
ループループ使使ししし个个々々々しし,计算の所要时间を测定ます。
Tic;为= 1:numel(idx,:) = factor(idx,:));结束TOC.
运行时间为684.464556秒。
并行计算工具箱™では,并列プールの复数ので计算を実行する,ワークフローをアップでき。为
ループループの反复はは独立しいるいる,parfor
ループを使用して複数のワーカーに反復を分散することができます。単純に为
ループをparfor
ループに変換します。次に,コードを実行して全体の計算時間を測定します。コードは追加の変更なしで並列プールで実行され,ワーカーは計算結果をローカルワークスペースに返します。作業負荷が複数のワーカーに分散されているため,計算時間は短くなります。
Tic;parfor= 1:numel(idx,:) = factor(idx,:));结束TOC.
运行时间为144.550358秒。
parfor
并行计算工具箱并行计算工具箱の2回目の実行を示します。
既定のクラスタープロファイルは“本地”
です。MATLABの[ホーム]タブ,[並列]、[既定のクラスターの选択]で,このプロファイルが既定に設定されていることを確認できます。このプロファイルが有効の場合,MATLABは並列プール用のマシンにワーカーを作成します。“本地”
プロファイルを使使する,matlabは既定でマシンの物理コアコア同じのワーカー(上限は推奨されるワーカーワーカー并列基本设定します。并列基本设定设定使ますし并列动手を制御ことができ.matlabの[ホーム]タブで,[並列]、[並列基本設定]を選択します。
ワーカーワーカー数号高速化するするに,ワーカーの最大数数量制て,同じコードコードを数回ますますしまずまず,各テストの结果を保存するための配列を作成します。
numworkers = [1 2 4 6];Tlocal =零(尺寸(numworkers));
ループループ使使使ワーカーのの最最最反复し,parfor
の2番目の入力引数を使用します。
为w = 1:numel(numWorkers) tic;parfor(idx = 1:numel(compositeNumbers), numWorkers(w))) factors(idx,:) = factor(compositeNumbers(idx));结束Tlocal(w)= toc;结束
1つのワーカーでの计算计算と最大声数码で计算と比を计算て,高速の计算します。しかし,并列并列いるますます,并列ているます。
f =图;speedup = tlocal(1)./ tlocal;情节(numWorkers加速);标题('加速与工人数量的数量);包含(工人的数量);xticks (numWorkers);ylabel ('加速');
計算が完了したら,現在の並列プールを削除します。これにより,クラスター用に新しい並列プールを作成できます。関数GCP.
で現在の並列プールを取得できます。
删除(GCP);
計算タスクがローカルコンピューターにとって大きすぎるまたは遅すぎる場合は,計算をオンサイトのクラスターまたはクラウドにオフロードできます。以降の節の内容を実行するには,クラスターにアクセスできなければなりません。MATLABの[ホーム]タブで,[並列]、[クラスタークラスターの]〖matlab server™〗インストールアクセスできるかかをししははについてははについてははしについてはしについてについてについてについてについてについてについてについてについてについてについてはについてについてししについてますについてについてについてについてしはしはについてははしししますししについてますししについてししししについてについてlクラスターの検出を参照してください。
クラスターにアクセスできない場合は,以降の節に進む前にクラスターへのアクセスを設定しなければなりません。马铃薯草では、Amazon AWS などのクラウド サービス上に MATLAB デスクトップから直接クラスターを作成することができます。[ホーム]タブの[並列]メニューで[クラスターの作成と管理)を選択します。クラスタープロファイルマネージャーで,[クラウドクラスターの作物]をクリックします。クラウドへのスケールアップの詳細については,云中心入门を参照してください。ネットワーク上のクラスターにスケーリングするオプションの详细については,MATLABParallel服务器入門(MATLAB并行服务器)を参照してください。
クラスタークラスタープロファイルを设定设定した,そのプロパティを[並列]、[クラスターの作成と管理)で変更できます。詳細については,クラスターの検出とクラスタープロファイルの使用を参照してください。次のイメージはクラスタープロファイルマネージャー内のクラスタープロファイルを示します。
並列関数を既定でクラスターで実行する場合,[並列]、[既定のクラスターの选択]で,クラスタープロファイルを既定として設定します。
また,プログラムによる方法でクラスターを指定することもできます。このためには,parpool
コマンドにクラスタープロファイルの名前を指定して,クラスターで並列プールを起動します。次のコードのmycluster.
をクラスタープロファイルの名前に置き换えます。また,2-番目の入力引数でワーカー数を指定します。
Parpool(“MyCluster”, 64);
使用MyCluster配置文件启动并行池(parpool)…连接到64个工人。
前と同様に,ワーカーの最大数を制限して同じコードを複数回実行することで,ワーカー数による高速化を測定します。この例のクラスターはローカル設定よりも多くのワーカーを使用できるため,numworkers.
により多くの値を指定できます。このコードを実行すると,parfor
ループがクラスターで実行されます。
numworkers = [1 2 4 6 16 32 64];tcluster =零(大小(numworkers));为w = 1:numel(numWorkers) tic;parfor(idx = 1:numel(compositeNumbers), numWorkers(w))) factors(idx,:) = factor(compositeNumbers(idx));结束tCluster (w) = toc;结束
高速化を計算してワーカー数に対してプロットし,ワーカー数と共に計算がスケールアップする様子を可視化します。この結果をローカル設定の結果と比較します。ワーカー数と共に高速化も上昇していることがわかります。しかし,並列化に伴うオーバーヘッドがあるため,スケーリングは比例的ではありません。
图(f);持有在加速= tCluster(1)。/ tCluster;情节(numWorkers加速);标题('加速与工人数量的数量);包含(工人的数量);XTICKS(NUMWORKERS(2:结束));ylabel ('加速');
計算が完了したら,現在の並列プールを削除します。
删除(GCP);
批处理
によるによる计算のオフロードとスケーリングプロトタイプの作成と対話的な実行の完了後,バッチジョブを使用して,実行時間の長い計算をオフロードしてバックグラウンドのバッチ処理で実行できます。計算はクラスターで実行されるため,MATLABを閉じて,結果を後で取得することができます。
関数批处理
を使用してジョブをクラスターに投入します。スクリプト内にアルゴリズムの内容を配置し,関数批处理
を使用してスクリプトを投入します。たとえば,スクリプトmyparallellgorithm.はこの例で示すように,整数の因数分解問題に基づくシンプルなベンチマークを実行します。このスクリプトは,異なるワーカー数を使用して複数の問題の複雑度の計算時間を測定します。
批处理
をを使しスクリプトスクリプトををすると,matlabはスクリプトと使,すべてのワークでもクラスター転送がますもを転送が大声。として,スクリプトを关键ファイルするするにより,この通行オーバーは。myparallellgorithm.を关节に変换方法myparalleltalgorithmfcn.を参照してください。
次のコードはmyparalleltalgorithmfcn.
をバッチジョブとして投入します。myparalleltalgorithmfcn.
は2つの出力引数,numworkers.
と时间
を返すため,出力数の入力引数として2
をを指定しなければばませませませコードににparfor
ループ用ののプールがが必要ためため批处理
で名前と値のペア“池”
を使用してワーカー数を指定します。クラスターは追加のワーカーを使用して関数自体を実行します。既定で,批处理
はクラスター内のワーカーの現在のフォルダーをMATLABクライアントの現在のフォルダーに変更します。これは現在のフォルダーの制御に便利な場合があります。たとえば,クラスターの使用しているファイルシステムが異なる場合(WindowsクライアントマシンからLinuxクラスターに送信する場合など)パスが異なります。名前と値のペア“CurrentFolder”
を任意のフォルダーに設定するか,“。”
に设定してワーカーのフォルダーの変更を回避します。
totalNumberOfWorkers = 65;集群= parcluster (“MyCluster”);作业=批处理(群集,'myparillellgorithmfcn'2,“池”,totalnumberofworkers-1,“CurrentFolder”,“。”);
投入投入后のジョブジョブの状态を监视するに,[並列]、[ジョブジョブの]でジョブモニターを开放ます。计算がクラスターで开放されるに,ジョブの状态が跑步
に変更されます。
ジョブが投入さたら,matlabを闭じることができます.matlabを再度开放と,ジョブモニターがジョブ记录して,ジョブを右クリックして操ことができことができますたとえばたとえばことができます。たとえば,ジョブオブジェクトをするするには[詳細を表示)を選択し,バッチジョブの出力をワークスペースに転送するには(出力の取得)を選択します。
あるいは,ジョブが完了するまでMATLABをブロックする場合は,ジョブオブジェクトに対して関数等待
を使使し。
等待(工作);
关节の力をクラスターから転送するには,关联fetchOutputs
を使使し。
输出= fetchOutputs(工作);numWorkers ={1}输出;时间=输出{2};
结果结果取得后,ローカルマシンでの计算に结果ををし,ワーカーコードはプロットますます。プロットプロット得ますます。それぞれそれぞれ问题复雑度で,加加のワーカーによるオーバーヘッドが化によるまで超えるまでまでまでしいることがわかりますしし度高度,ワーカー数量多重とき良い高速并列がますするヘッドヘッドヘッドののが少ない少ない少ない少ない少ない少ないためためためですためですためためためためためためため
图speedup = time(1,:)./time;情节(numWorkers加速);传奇(“问题复杂性1”,《问题复杂性2》,'问题复杂性3','问题复杂性4','地点',“西北”);标题(“加速和复杂性”);包含(工人的数量);XTICKS(NUMWORKERS(2:结束));ylabel ('加速');
parpool
|parfor
|批处理
|fetchOutputs(工作)