parforOptions
parfor のオプション セット
説明
は、プール オブジェクト opts = parforOptions(pool)pool を使用して parfor のオプションのセットを作成します。
複数のプールを作成する場合は、この構文を使用して、どのプールで parfor ループを実行するかを指定します。
ヒント
parfor ループを実行する際、使用可能な並列プールがあれば、MATLAB® は自動でそれを使用してループを実行します。
既定のクラスター プロファイルまたは使用可能な並列プールを使って parfor ループを実行するだけでよい場合は、parforOptions の代わりに構文 parfor loopVar=initVal:endval; statements; end を使用することを検討してください。
は、1 つ以上の名前と値の引数を使用して、opts = parforOptions(___,Name,Value)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 は反復を 2、1、1、および 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"である場合、または値を指定しない場合、parforOptionsはparforループの反復を可変サイズのサブレンジに分割し、さまざまなparforループの適切なパフォーマンスを追求します。RangePartitionMethodが"fixed"の場合、parforOptionsはparforループの反復を固定サイズのサブレンジに分割します。この方法を使用する場合は、名前と値の引数SubrangeSizeも使用して、サブレンジのサイズを指定する必要があります。RangePartitionMethodが関数ハンドルの場合、parforOptionsはその関数ハンドルを使用してparforループの反復を固定サイズのサブレンジに分割します。この関数は、関数ハンドルを
sizes = customFcn(n,nw)として実行します。nはparforループ内の反復の数。nwはループの実行に使用できるワーカーの数。ループの実行にプールを使用する場合、
nwは並列プール内のワーカー数です。ループの実行にプールなしでクラスターを使用する場合、nwはクラスターのNumWorkersプロパティです。sizesはサブレンジ サイズの整数ベクトル。nとnwの任意の値について、ベクトル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 として指定します。
AutoAddClientPath を true に指定した場合、parfor ループを実行する際に、ユーザーが追加したエントリが各ワーカーのパスに追加されます。parfor ループが終了すると、これらのエントリは各ワーカーのパスから削除されます。
ファイルを自動的にワーカーにコピーするフラグ。true または false として指定します。
計算をワーカーにオフロードするとき、クライアントでの計算に必要なファイルもすべてワーカー上で使用可能でなければなりません。AutoAttachFiles を true に指定すると、クライアントはそのようなファイルを自動的に検出して追加しようとします。AutoAttachFiles を false に指定すると、クライアントでの自動検出がオフになります。自動検出ではすべてのファイルを検索できない場合や、クライアントからワーカーへのファイルの送信速度が遅い場合は、以下の引数を使用します。
ワーカー上でアクセスできないフォルダーにファイルが含まれている場合は、
AttachedFiles引数を使用してファイルを指定します。クラスターによって、指定した各ファイルがクライアントからワーカーへコピーされます。ワーカー上でアクセスできるフォルダーにファイルが含まれている場合は、代わりに
AdditionalPaths引数を使用できます。AdditionalPaths引数を使用して各ワーカーの MATLAB 検索パスにパスを追加し、クライアントからワーカーへのファイルの不必要なコピーを回避します。
自動的に検出されたファイルは、parfor ループを実行する際にワーカーに送信されます。parfor ループが終了すると、これらのファイルとフォルダーは各ワーカーのファイル システムから削除されます。
プールの名前と値の引数
ワーカーの最大数。正の整数スカラーとして指定します。
既定値は Inf です。
MaxNumWorkersを有限の正の整数として指定した場合、parforループは最大でMaxNumWorkers個のワーカーを使って実行される。MaxNumWorkersをInfに指定した場合、parforループは使用可能なワーカーをすべて使って実行される。
拡張機能
この関数はスレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2019a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)