Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

parforOptions

parfor のオプション (反復の分割など)

説明

opts = parforOptions(cluster) は、並列プールを作成せずに cluster 内のワーカー上でステートメントを実行するように parfor に指示する、parfor のオプション セットを作成します。代わりに、parfor は、独立したタスクをクラスターに投入し、ループ本体を実行します。parfor は、clusterNumWorkers プロパティ (使用可能なワーカー数) に従って反復を分割し、ワーカー間に分散します。

opts = parforOptions(pool) は、並列プール pool 内のワーカー上でステートメントを実行するように parfor に指示する、parfor のオプション セットを作成します。

opts = parforOptions(___,'RangePartitionMethod',method) は、method を使用して、parfor ループの反復をサブレンジに分割する方法を定義します。サブレンジは、parfor がワーカー上でグループとして実行する、連続したループ反復のブロックです。

opts = parforOptions(___,'RangePartitionMethod','fixed','SubrangeSize',n) は、parfor ループの反復を n 以下のサイズのサブレンジに分割します。

opts = parforOptions(cluster,___,Name,Value) は、クラスター オブジェクト cluster と共に使用する追加オプションを指定します。

すべて折りたたむ

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

cluster = parcluster;
opts = parforOptions(cluster);

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

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

values = [3 3 3 7 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

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

parforOptions を使用して、parfor が反復をワーカー用のサブレンジに分割する方法を制御できます。範囲の分割を制御することで、parfor ループのパフォーマンスを最適化できます。最良のパフォーマンスを得るには、次のようにサブレンジを分割するようにします。

  • サブレンジのスケジューリングのオーバーヘッドよりも計算時間が長くなる程度に大きい

  • すべてのワーカーをビジー状態に維持するために十分なサブレンジ数が存在する程度に小さい

反復を固定サイズのサブレンジに分割するには、parfor のオプション セットを作成し、'RangePartitionMethod''fixed', に設定し、'SubrangeSize' を使用してサブレンジ サイズを指定します。

opts = parforOptions(parcluster,'RangePartitionMethod','fixed','SubrangeSize',2);

parfor オプションを 2 番目の入力引数として parfor に渡します。この場合、parfor は反復を 2 回の反復からなる 3 つのグループに分割します。

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

反復を異なるサイズのサブレンジに分割するには、'RangePartitionMethod' の名前と値のペアに関数ハンドルを渡します。この関数はサブレンジ サイズのベクトルを返さなければならず、その合計は反復回数と等しくなければなりません。この構文の詳細については、methodを参照してください。

opts = parforOptions(parcluster,'RangePartitionMethod', @(n,nw) [2 1 1 2]);

parfor オプションを 2 番目の入力引数として parfor に渡します。この場合、parfor は反復を 211、および 2 回の反復からなる 4 つのグループに分割します。

values = [3 3 7 7 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

parforOptions を使用して、並列プールのワーカー上で parfor を実行できます。parfor- ループ用に固定数のワーカーを予約する場合は、この方法を使用します。また、parfor がワーカー用に反復を分割する方法をより細かく制御できます。

関数 parpool を使用して並列プールを作成します。既定で、parpool は既定のクラスター プロファイルを使用します。既定のプロファイルは、MATLAB の [ホーム] タブの [並列][既定のクラスターの選択] で確認します。並列プール オブジェクトを使用して parfor のオプション セットを作成し、オプションを指定します。たとえば、分割方法として固定サイズ 2 のサブレンジを指定します。

p = parpool;
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
opts = parforOptions(p,'RangePartitionMethod','fixed','SubrangeSize',2);

parfor のオプションを 2 番目の入力引数として関数 parfor に渡します。parfor は並列プール上でループ本体を実行し、opts に従って反復を分割します。

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

並列プールを使用して、あるいは使用せずに parfor を実行するときに、MATLAB は既定でループ本体の依存関係の解析を自動的に実行します。MATLAB はステートメントを実行する前に、必要なファイルをワーカーに転送します。場合によっては、これらのファイルを明示的にワーカーに転送しなければならないことがあります。詳細については、プログラムの依存関係の特定を参照してください。

並列プールなしで parfor を使用する場合、parforOptions を使用してファイルを転送します。parcluster オプションを使用してクラスター オブジェクトを作成します。関数 parforOptions を使用し、このクラスター オブジェクトを指定して parfor のオプション セットを作成します。ファイルをワーカーに転送するには、'AttachedFiles' の名前と値のペアを使用します。

cluster = parcluster;
opts = parforOptions(cluster,'AttachedFiles',{'myFile.dat'});

parfor のオプションを 2 番目の入力引数として関数 parfor に渡します。ワーカーはループ本体で必要なファイルにアクセスできます。

parfor (i=1:2,opts)
    M = csvread('myFile.dat',0,2*(i-1),[0,2*(i-1),1,1+2*(i-1)]);
    out(i) = norm(rand(ceil(norm(M))*1e3));
end

入力引数

すべて折りたたむ

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

例: opts = parforOptions(parcluster('local'));

データ型: parallel.Cluster

固定サイズの分割方法のサブレンジ サイズ。正の整数として指定します。名前と値のペア 'RangePartitionMethod''fixed' に設定しなければなりません。

例: opts = parforOptions(cluster,'RangePartitionMethod','fixed','SubrangeSize',5);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

並列プール。parfor が実行される parallel.Pool オブジェクトとして指定します。並列プールを作成するには、関数parpoolを使用します。

例: opts = parforOptions(parpool('local'));

データ型: parallel.Pool

範囲の分割方法。次のいずれかとして指定します。

  • 'auto' – この方法は、ループを可変サイズのサブレンジに分割します。さまざまな parfor ループについて優れたパフォーマンスを実現しようとします。

  • 'fixed'parfor ループを固定サイズのサブレンジに分割します。'SubrangeSize' の名前と値のペアを設定することで、各サブレンジ サイズを指定しなければなりません。

  • 関数ハンドル – 関数ハンドルを使用して、ループ反復をサブレンジに分割します。関数は sizes = customFcn(n,nw) の形式でなければなりません。ここで、nparfor ループの反復回数、nw はループの実行に使用できるワーカー数です。ループが並列プール上で実行されている場合、nw は並列プール内のワーカー数です。クラスターを使用してループが実行されている場合、nw はクラスターの NumWorkers プロパティです。customFcn はサブレンジ サイズのベクトル sizes を返します。このベクトルは sum(sizes) == n を満たさなければなりません。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

例: opts = parforOptions(cluster,'RangePartitionMethod','fixed','SubrangeSize',10);

例: opts = parforOptions(cluster,'RangePartitionMethod',@(n,nw) [2,4,4,n-10]);

データ型: char | function_handle

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: opts = parforOptions(cluster,'AttachedFiles',{'myFile.dat'});

クライアントのパスをワーカーのパスに追加するかどうかを指定するフラグ。AutoAddClientPath と、true または false で構成されるコンマ区切りのペアとして指定します。

データ型: logical

parfor ループ本体の依存関係の解析を有効にし、ワーカーに必要なファイルを転送するかどうかのフラグ。AutoAttachFiles と、true または false で構成されるコンマ区切りのペアとして指定します。

データ型: logical

ワーカーに転送するファイル。AttachedFiles と、文字ベクトル、string、string 配列または文字ベクトルの cell 配列で構成されるコンマ区切りのペアとして指定します。

例: {'myFun.m','myFun2.m'}

データ型: char | string | cell

parfor を実行する前に MATLAB® パスに追加するワーカーのパス。AdditionalPaths と、文字ベクトル、string、string 配列または文字ベクトルの cell 配列で構成されるコンマ区切りのペアとして指定します。

例: {'some/path/','another/path'}

データ型: char | string | cell

出力引数

すべて折りたたむ

parfor のオプション。parforOptions オブジェクトとして返されます。parfor ループのオプションを指定するには、parfor のオプション セットを parfor の 2 番目の入力引数に渡します。

例: parfor(i=1:10,parforOptions(parcluster)); out(i)=i; end

R2019a で導入