Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

parforOptions

parfor のオプション セット

説明

opts = parforOptions(cluster) は、クラスター オブジェクト cluster を使用して parfor のオプションのセットを作成します。parfor ループにオプションを指定するには、構文 parfor (loopVar=initVal:endval, opts); statements; end を使用します。

opts = parforOptions(pool) は、プール オブジェクト pool を使用して parfor のオプションのセットを作成します。

複数のプールを作成する場合は、この構文を使用して、どのプールで parfor ループを実行するかを指定します。

ヒント

parfor ループを実行する際、使用可能な並列プールがあれば、MATLAB® は自動でそれを使用してループを実行します。

既定のクラスター プロファイルまたは使用可能な並列プールを使って parfor ループを実行するだけでよい場合は、parforOptions の代わりに構文 parfor loopVar=initVal:endval; statements; end を使用することを検討してください。

opts = parforOptions(___,Name,Value) は、1 つ以上の名前と値の引数を使用して、parfor のオプションのセットを作成します。たとえば、parforOptions(pool,"MaxNumWorkers",M) を使用すると、プール オブジェクト pool と最大 M 個のワーカーを使用して parfor ループが実行されます。名前と値の引数は、他のすべての入力引数の後で指定します。

すべて折りたたむ

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

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 'Processes' 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

入力引数

すべて折りたたむ

クラスター。parallel.Cluster オブジェクトとして指定します。クラスター オブジェクトを作成するには、parcluster を使用します。

例: parcluster('Processes');

プール。parallel.Pool オブジェクトとして指定します。

  • 並列プールを作成するには、parpool を使用。

  • バックグラウンド プールを取得するには、backgroundPool を使用。

例: parpool('Processes');

例: backgroundPool;

名前と値の引数

オプションの引数ペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a 以前は、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みました。

例: opts = parforOptions(cluster,"AttachedFiles","myFile.dat");

すべてのオブジェクト タイプ

すべて折りたたむ

反復をサブレンジに分割する方法。"auto""fixed"、または関数ハンドルとして指定します。サブレンジは、parfor がワーカー上でグループとして実行する、連続したループ反復のブロックです。この引数は、反復をワーカー間で分散する方法を指定して parfor ループのフォーマンスを最適化するために使用します。

  • RangePartitionMethod"auto" である場合、または値を指定しない場合、parforOptionsparfor ループの反復を可変サイズのサブレンジに分割し、さまざまな parfor ループの適切なパフォーマンスを追求します。

  • RangePartitionMethod"fixed" の場合、parforOptionsparfor ループの反復を固定サイズのサブレンジに分割します。この方法を使用する場合は、名前と値の引数 SubrangeSize も使用して、サブレンジのサイズを指定する必要があります。

  • RangePartitionMethod が関数ハンドルの場合、parforOptions はその関数ハンドルを使用して parfor ループの反復を固定サイズのサブレンジに分割します。

    この関数は、関数ハンドルを sizes = customFcn(n,nw) として実行します。

    • nparfor ループ内の反復の数。

    • nw はループの実行に使用できるワーカーの数。

      ループの実行にプールを使用する場合、nw は並列プール内のワーカー数です。ループの実行にプールなしでクラスターを使用する場合、nw はクラスターの NumWorkers プロパティです。

    • sizes はサブレンジ サイズの整数ベクトル。nnw の任意の値について、ベクトル sizes の合計は n と等しくなる必要があります。

例: parforOptions(cluster,"RangePartitionMethod","auto")

例: parforOptions(cluster,"RangePartitionMethod",@(n,nw) ones(1,n))

サブレンジ内の最大反復回数。正の整数スカラーとして指定します。サブレンジは、parfor がワーカー上でグループとして実行する、連続したループ反復のブロックです。

この引数を使用する際は、RangePartitionMethod 引数を "fixed" として指定する必要があります。

例: parforOptions(cluster,"RangePartitionMethod","fixed","SubrangeSize",5)

クラスターの名前と値の引数

すべて折りたたむ

parfor を実行している各ワーカーの MATLAB 検索パスに追加するフォルダー。文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列として指定します。

既定値は空の cell 配列です。

フォルダーは、parfor ループを実行する際にワーカーの検索パスに追加されます。parfor ループが終了すると、これらのフォルダーはワーカーの検索パスから削除されます。

クライアントとワーカーが同じフォルダーに対し異なるパスをもつ場合、ワーカーのパスを使用してフォルダーを指定します。たとえば、フォルダーへのパスがクライアントでは /shared/data、ワーカーでは /organization/shared/data である場合は、"/organization/shared/data" を指定します。

"../myFolder" のような相対パスを指定する場合、パスはワーカーの現在の作業ディレクトリを基準として解決されます。

AdditionalPaths を指定すると、クライアントからワーカーへのファイルの不必要なコピーが回避されます。AdditionalPaths は、ワーカーでファイルが使用可能な場合のみ指定します。ファイルが使用可能でない場合は、AttachedFiles を使用してファイルをワーカーに送信します。

例: opts = parforOptions(cluster,"AdditionalPaths",["/additional/path1","/additional/path2"])

parfor ループを実行している各ワーカーに送信するファイルとフォルダー。文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列として指定します。

既定値は空の cell 配列です。

ファイルとフォルダーは parfor ループの実行時にワーカーに送信されます。parfor ループが終了すると、これらのファイルとフォルダーは各ワーカーのファイル システムから削除されます。

"../myFolder" のような相対パスを指定する場合、パスはクライアントの現在の作業ディレクトリを基準として解決されます。

ワーカーでファイルが使用可能な場合は、代わりに AdditionalPaths を指定します。AdditionalPaths を指定すると、クライアントからワーカーへのファイルの不必要なコピーが回避されます。

クライアントのパスをワーカーに送信するフラグ。true または false として指定します。

AutoAddClientPathtrue に指定した場合、parfor ループを実行する際に、ユーザーが追加したエントリが各ワーカーのパスに追加されます。parfor ループが終了すると、これらのエントリは各ワーカーのパスから削除されます。

ファイルを自動的にワーカーにコピーするフラグ。true または false として指定します。

計算をワーカーにオフロードするとき、クライアントでの計算に必要なファイルもすべてワーカー上で使用可能でなければなりません。AutoAttachFilestrue に指定すると、クライアントはそのようなファイルを自動的に検出して追加しようとします。AutoAttachFilesfalse に指定すると、クライアントでの自動検出がオフになります。自動検出ではすべてのファイルを検索できない場合や、クライアントからワーカーへのファイルの送信速度が遅い場合は、以下の引数を使用します。

  • ワーカー上でアクセスできないフォルダーにファイルが含まれている場合は、AttachedFiles 引数を使用してファイルを指定します。クラスターによって、指定した各ファイルがクライアントからワーカーへコピーされます。

  • ワーカー上でアクセスできるフォルダーにファイルが含まれている場合は、代わりに AdditionalPaths 引数を使用できます。AdditionalPaths 引数を使用して各ワーカーの MATLAB 検索パスにパスを追加し、クライアントからワーカーへのファイルの不必要なコピーを回避します。

自動的に検出されたファイルは、parfor ループを実行する際にワーカーに送信されます。parfor ループが終了すると、これらのファイルとフォルダーは各ワーカーのファイル システムから削除されます。

プールの名前と値の引数

すべて折りたたむ

ワーカーの最大数。正の整数スカラーとして指定します。

既定値は Inf です。

  • MaxNumWorkers を有限の正の整数として指定した場合、parfor ループは最大で MaxNumWorkers 個のワーカーを使って実行される。

  • MaxNumWorkersInf に指定した場合、parfor ループは使用可能なワーカーをすべて使って実行される。

バージョン履歴

R2019a で導入