main Content

parfor

ワーカーで为了ループの反复并列実行

说明

parforloopvar=initVal结尾Val;statements;结尾は,プール内のでで为了ループのを并列実行。。

mATLAB®は,loopvarの値がinitValから结尾Valまでのに含まれる,,statements内の本体コマンドを実行し。。loopvar1ずつずつする値のベクトルををますます。。。。。。。。。。。。。ますしがが场合は,マルチコアコンピューターまたはクラスタークラスター上上ののstatementsの反復を実行できます。为了ループと同様、statementsに単一または複数の行を含めることができます。

parforがスループットの増加にどう役立つかについては、parforを使用するタイミングの決定を参照しください。

parforは,の点でのの为了ループとは異なります。

parfor(loopvar=initVal结尾Val,,,,m);statements;结尾mを使用て,ループででstatementsの評価に使用する並列プールの最大ワーカー数を指定します。mは非负整数なければなりませ。。

matlabははは并列内で可能ワーカーを使用します。[ホーム]タブの[環境]セクションで、[並列][並列基本設定]を选択て数をすることができます。Parpoolを使用して、並列プール内の既定のワーカー数をオーバーライドできます。プールに使用可能なワーカーがない場合やm0ののの,,はは本体非确定的的で実行実行しししますますが,はは并列実行実行ではありではありません。コードコードをををときときはははははは,,,,,,,

この构文し反复を并列実行には,のの并列プールが必要必要ですですはははparforを実行すると、既定のクラスター プロファイルで定義されたクラスターにワーカーの並列プールが自動的に作成されます。既定のクラスターは[当地的]です。[並列基本設定]でクラスター変更ます。详细について,,並列基本設定の指定を参照しください。

parfor(loopvar=initVal结尾Val,,,,选择);statements;结尾は,选择を使用て,ループででのstatementsの评価使用リソースを指定し。。parforのオプション セットを作成するには、関数parforOptionsを使用します。この方法では、最初に並列プールを作成せずにparforをクラスターで実行し,,parforにより反复ワーカーサブレンジ分割する方法制御できます。

parfor(loopvar=initVal结尾Val,,,,);statements;结尾は,プールをせずに,のワーカー上でstatementsを実行ます。これ,,parfor(loopvar = initval:endval,parforoptions(cluster));陈述;结尾の実行とです。

すべて折りたたむ

計算量の多いタスクについてparforループをし得た高速化测定します。

matlabエディターで次のの为了ループをます。时间を测定ため,,,抽动TOCを追加し。

抽动n = 200;a = 500;a =零(1,n);为了i = 1:n a(i) = max(abs(eig(rand(A))));结尾TOC

スクリプトをし経过时间确认します。

经过的时间为31.935373秒。

スクリプト内の为了ループをparforループに置き换え。

抽动n = 200;a = 500;a =零(1,n);parfori = 1:n a(i) = max(abs(eig(rand(A))));结尾TOC

新しいスクリプトを実行し、もう一度実行します。最初の実行は、2 回目の実行よりも遅くなります。これは、並列プールを起動して、コードをワーカーで使用可能にしなければならないためです。2 回目の実行の経過時間を確認します。

matlabによってによってによってローカルマシンにのワーカーからなる并列プールがが自动的にますます。。。

经过的时间为10.760068秒。

为了ループををつのつののののparforループに変換することにより,計算が高速になることを確認してください。並列プール内のワーカー数を増やすことにより、経過時間がさらに短縮される可能性があります。詳細については、为了ループからparforループへの変換およびクラスターおよびへののループループのアップアップを参照しください。

1 つのparforループに対するワーカーの最大数mを指定でき。m=0を設定して、プールが開いている場合でも、ワーカーを使用せずにデスクトップの MATLAB でループ本体を実行します。m=0の場合、MATLAB はループ本体を非確定的な順序で実行しますが、並列では実行しません。したがって、parforループが独立であり複数のワーカー上での実行に適しているかどうかをチェックできます。これは、parforループのをできる最もな方法です。parforループ本体直接ブレークを设定できん,,,parforループ本体から呼び出される関数にブレークポイントを設定できます。

m=0を指定して、プールが開いている場合でもデスクトップの MATLAB でparforループ本体実行します。

M = 0;%m指定最大工人数量y = ones(1,100);parfor(i = 1:100,M) y(i) = i;结尾

并列プールの数をするには,並列基本設定の指定およびParpoolを参照しください。

现在の内ワーカーが送受信するを测定するため,,parforループの前にticbytes(gcp),後にTocbytes(GCP)を追加し。gcpを引数使用,现在の并列を取得します。

現在の並列プールがまだある場合は、その並列プールを削除します。

delete(gcp('nocreate'))
Tic Ticbytes(GCP);n = 200;a = 500;a =零(1,n);parfori = 1:n a(i) = max(abs(eig(rand(A))));结尾Tocbytes(GCP)TOC

新しいスクリプトを実行し、もう一度実行します。最初の実行は、2 回目の実行よりも遅くなります。これは、並列プールを起動して、コードをワーカーで使用可能にしなければならないためです。

matlabによってによってによってローカルマシンにのワーカーからなる并列プールがが自动的にますます。。。

使用“本地”配置文件...连接到4名工人。... BytesSentToWorkers BytesReceivedFromWorkers __________________ ________________________ 1 15340 7024 2 13328 5712 3 13328 5704 4 13328 5728 Total 55324 24168

ticbytesTOCBytesの結果を使用して、並列プール内のワーカーが送受信したデータ量を調べることができます。この例では、データ転送量はわずかです。parforループの详细は,parforを使用するタイミングの決定および为了ループからparforループへの変換を参照しください。

关数parclusterを使用してクラスター オブジェクトを作成し、このクラスター オブジェクトを使用してparforのオプションをします。既定,,parclusterは既定クラスターを使用します。のプロファイルはは,,,,,[ホーム]タブの[並列][既定のの]で確認します。

cluster = parcluster;

クラスター内で直接parforの計算を実行するには、クラスター オブジェクトをparforの 2 番目の入力引数として渡します。

この方法を使用すると、parforはクラスター内の使用可能なすべてのワーカーを使用でき、ワーカーはループの完了後すぐに使用可能になります。この方法は、クラスターが並列プールをサポートしていない場合にも役立ちます。反復の分割などの他のオプションを制御する場合は、parforOptionsを使用します。

值= [3 3 3 7 3 3 3];parfor(i = 1:numel(values),群集)out(i)= norm(pinv(rand(vution(i)*1e3))));结尾

必要以上に長い時間ワーカーを使用することなく、大規模なクラスター上で parfor を実行するには、この構文を使用します。

入力引数

すべて折りたたむ

初期値initValと最終値结尾Valを持つ変数変数はの型にことができますが,値は整数整数でなけれなけれませませませ

parforループの変数は必ず、連続的に増加する整数にしてください。詳しいヘルプは、parforループ内変数のシューティングシューティングを参照しください。

parforループ変数は,さているを超えはなりませんん。详しい详しい,,,parforループでオーバーフロー回避回避を参照しください。

データ型:单身的|double|int8|int16|int32|int64|uint8|uint16|uint32|Uint64

ループインデックス変数loopvarの初期は任意の型することができます,値はは整数ででなければばなり。结尾Valparforの范囲を指定する,,m:nの形式にしなければなりません。

データ型:单身的|double|int8|int16|int32|int64|uint8|uint16|uint32|Uint64

ループインデックス変数loopvarの最终は任意の型することができます,値はは整数ででなければばなり。initValparforの范囲を指定する,,m:nの形式にしなければなりません。

データ型:单身的|double|int8|int16|int32|int64|uint8|uint16|uint32|Uint64

ループ本体。テキストとして指定します。parforループで実行する一連の MATLAB コマンド。

parforループをため,コードを変更なければならないがあります。ヘルプは,为了ループからparforループへの変換を参照しください。

parforループを入れ子にしないでください。入れ子にされた parfor ループおよび for ループ、およびその他の parfor の要件を参照しください。

並列実行するワーカーの最大数。非負の整数として指定します。上限を指定すると、追加のワーカーが使用可能な場合でも、MATLAB は上限までの数しか使用しません。使用可能なワーカー数より多くのワーカーを要求すると、MATLAB は、呼び出し時に使用可能な最大数のワーカーを使用します。ループの反復数がワーカー数より少ない場合、一部のワーカーは作業を行いません。

parforループ复数ワーカー実行できない(たとえばたとえば可能なコアコアがががつのみつのみつのみつのみm0のののののははを逐次実行しますます场合场合でででも,,,,,,ははははループをを非非确定的的なな顺序顺序でで実行しますますコードコードコードコードコード逐次を切り替え。

parforのオプション。オブジェクトとして指定ます。parforのオプション セットを作成するには、関数parforOptionsを使用します。

例:选择=parforOptions(parcluster);

クラスター。parforが実行されるparallel.Clusterオブジェクトとして指定ます。クラスター オブジェクトを作成するには、関数parclusterを使用します。

例:簇=parcluster('local')

データ型:parallel.Cluster

ヒント

  • 以下の场合にparforループを使用ます。

    • 简単なの反复が多数ある。。parforは,をに分割し,各スレッドでででつのグループの反复を実行実行できるようように。

    • 実行に長時間かかるループ反復がいくつかある場合。

  • ループのがのの结果にする场合は,parforループを使用しないでください。

    リダクションはルールの例外。。"リダクション"変数はのに全体依存一方,顺序にには依存しないない値をを累积しますます。。リダクション変数を参照しください。

  • parforを使用する際、結果を取得するにはループが完了するまで待たなければなりません。クライアントの MATLAB がブロックされ、ループを早期に終了することができません。中間結果を取得する場合や、为了ループを终了するは,代わりに帕菲瓦尔を试用しください。

  • クラスターオブジェクト指定しない,,parforループは并列で実行されがない场合,并列基本设定设定でプールのの自动起动がが无效无效无效にparforにより新しいプール起动れます。プールがなく,parforによる并列起动できない场合,はセッションで逐次実行れます。

  • 并列プールのプロファイルでAutoAttachFilesプロパティが真的に設定されている場合、MATLAB はparforループをしに必要なコードを决定します。listAutoAttachedFilesを参照しください。次に、MATLAB はそれらのファイルを自動で並列プールに加え、ワーカーでコードを使用できるようにします。

  • スクリプトをparforループ内呼び出すことできん。,スクリプト呼び出す关数を呼び出す呼び出すことはは。。。

  • parforループ内でclearを使用でくださいワークスペースの性违反违反します。parforループまたは spmd ステートメント内での透過性の確保を参照しください。

  • parforループを使用する代わりに、Parsimsimulink金宝app®モデルを並列実行できます。Simulink の並列使用の詳細と例については、运行多个模拟(金宝appSimulink)を参照しください。

バージョン履歴

R2008a で導入