最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英语でご覧になれます。
PARFOR
ループ反复が独立していることの确认对于
ループをPARFOR
ループに変换したときにエラーが表示された场合は,PARFOR
ループの反复が独立していることを确认します。PARFOR
ループの反复には “确定的な顺序がない”一方で,对于
ループは “逐次的”です。また,PARFOR
ループの反复は并列プール内の异なるMATLAB®ワーカー上で実行されるため,反复间で情报が共有されません。したがって,PARFOR
ループの反复は前の反复结果に依存してはなりません。この规则の唯一の例外は,リダクション変数の使用によりループ内に値を累积する场合です。
次の例では,左侧で对于
ループを,右侧ではPARFOR
ループを使用して同等な结果を得ています。この例をMATLABコマンドウィンドウで试してください。
明确一个对于I = 1:8 A(I)= I;结束一个 A = 1 2 3 4 5 6 7 8 |
明确一个PARFORI = 1:8 A(I)= I;结束一个 A = 1 2 3 4 5 6 7 8 |
一个
の各要素はそのインデックスと等しくなっています。PARFOR
ループは机能しますが,これは各要素がインデックス付きのループ変数のみにより决定され,他の変数には依存しないからです。独立したタスクを含む对于
ループは,PARFOR
ループの最适な候补です。
既定では,并列プールがまだ起动していない场合,PARFOR
は自动的にワーカーの并列プールを起动します。并列设定が适切に设定されている场合,PARFOR
は既定のクラスタープロファイルを使用してプールを作成します。
この例では,对于
ループとまったく同様に,PARFOR
ループの后で配列要素がクライアントワークスペース内で使用可能になります。
ここで,インデックスが付いていない変数か,またはインデックスがループ変数一世
に依存しない変数をループ内で使用します。以下の例を実行し,その后d
および一世
の値を确认します。
明确一个d = 0;I = 0;对于I = 1:4 d = I * 2;A(1)= d;结束一d我 A = 2 4 6 8 d = 8 i = 4的 |
明确一个d = 0;I = 0;PARFORI = 1:4 d = I * 2;A(1)= d;结束一d我 A = 2 4 6 8 d = 0 I = 0 |
両方の例で一个
の要素は同じですが,d
の値は异なってます。对于
ループでは反复が逐次実行されるため,実行后のd
はループの最终反复で保持していた値を取ります。しかし,PARFOR
ループでは反复が并列実行されるため,ループの终わりでd
に明确な値を代入することは不可能です。この状况はループ変数一世
にも当てはまります。したがって,PARFOR
ループの动作は,ループ外の変数d
と一世
に影响しないように定义されています。これらの値はループの前后で不変です。PARFOR
ループ内の変数が独立でない场合,对于
ループ内のものとは异なる结果になることがあります。つまり,PARFOR
ループでは,それぞれの反复が他の反复とは独立している必要があります。PARFOR
ステートメントに続くすべてのコードは,ループ反复の顺序に依存していてはなりません。
コードアナライザーは,ループの反复が依存的かどうかの诊断に役立ちます。例のコードでは,反复が前の反复によって定义されています。
PARFORK = 2:10 X(K)= X(K-1)+ K;结束
ただし,他の场合ではコードアナライザーは依存关系をマークできません。
その他一般的なPARFOR
の问题のヘルプについては,入れ子にされたPARFORループおよび用于ループ,およびその他のPARFORの要件を参照してください。