ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

parpool

クラスターでの並列プールの作成

構文

parpool
parpool(poolsize)
parpool(profilename)
parpool(profilename,poolsize)
parpool(cluster)
parpool(cluster,poolsize)
parpool(___,Name,Value)
poolobj = parpool(___)

説明

parpool は既定のクラスター プロファイルを使用してワーカーの並列プールを起動します。このとき、並列設定で指定されたプール サイズと既定のプロファイルが使用されます。parpool は、並列言語機能を実行するために、NumWorkers の範囲を [1, preferredNumWorkers] に指定して、既定のクラスターにプールを作成します。preferredNumWorkers は並列設定で定義された値です。

parpool はワーカーのプールに特別なジョブを作成し、MATLAB® クライアントを並列プールに接続することで、MATLAB の並列言語機能をすべて使用可能にします。並列言語機能には parforparfevalparfevalOnAllspmd および distributed が含まれます。可能な場合には、ワーカーの作業フォルダーは MATLAB クライアント セッションの作業フォルダーと一致するように設定されます。

parpool(poolsize) は、指定されたワーカー数のプールを作成して返します。poolsize には正の整数か、または整数の 2 要素ベクトルとして指定された範囲を使用できます。poolsize が範囲の場合、結果のプールのサイズは要求された範囲で最大になります。

poolsize を指定すると、設定またはプロファイルで指定されたワーカー数がオーバーライドされます。また、ワーカーが使用可能になるまで待機しなければならない場合でも、正確にその数のワーカーからなるプールが起動されます。大部分のクラスターでは、開始できるワーカーの最大数が決まっています。プロファイルで MJS (MATLAB ジョブ スケジューラ) クラスターが指定されている場合、parpool は使用するワーカーを、既に実行中のワーカーとその MJS で使用可能なワーカーから確保します。プロファイルでローカルまたはサードパーティ製スケジューラが指定されている場合、parpool はプールのワーカーを起動するようそのスケジューラに指示します。

parpool(profilename) または parpool(profilename,poolsize) により、profilename が示すクラスター プロファイルを使用してワーカー プールが起動されます。

parpool(cluster) または parpool(cluster,poolsize) により、cluster クラスター オブジェクトで指定されたクラスターでワーカー プールが起動されます。

parpool(___,Name,Value) は、プールを起動する際に特定のプロパティに対して指定した値を適用します。

poolobj = parpool(___) はクラスターのプールを示す parallel.Pool オブジェクトをクライアント ワークスペースに返します。このプール オブジェクトを使用すると、プールをプログラムにより削除したり、プールのプロパティにアクセスすることができます。並列プールをシャットダウンするには、delete(pool) を使用します。

すべて折りたたむ

ワーカー数を定義する既定のプロファイルを使用して並列プールを起動します。

parpool

myProf というプロファイルを使用して、16 個のワーカーからなる並列プールを起動します。

parpool('myProf',16)

ローカル プロファイルを使用して、2 個のワーカーからなる並列プールを起動します。

parpool('local',2)

既定のプロファイルで特定されたクラスターを表すオブジェクトを作成し、このクラスター オブジェクトを使用して並列プールを起動します。プールのサイズは既定のプロファイルによって決定されます。

c = parcluster
parpool(c)

既定のプロファイルを用いて並列プールを起動し、2 つのコード ファイルをワーカーに渡します。

parpool('AttachedFiles',{'mod1.m','mod2.m'})

既定のプロファイルを用いて並列プールを作成し、その後でプールを削除します。

poolobj = parpool;

delete(poolobj)

現在の並列プールにあるワーカーの数を検出します。

poolobj = gcp('nocreate'); % If no pool, do not create new one.
if isempty(poolobj)
    poolsize = 0;
else
    poolsize = poolobj.NumWorkers
end

入力引数

すべて折りたたむ

並列プールのサイズ。正の整数、または整数の 2 要素ベクトルで指定された範囲として指定します。poolsize が範囲の場合、結果のプールのサイズは要求された範囲で最大になります。並列設定または並列プロファイルで既定の推奨されるワーカー数を設定します。

例: parpool('local',2)

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

クラスターとプロパティを定義するプロファイル。文字ベクトルとして指定します。

例: parpool('myClusterProfile',16)

データ型: char

プールを起動するクラスター。クラスター オブジェクトとして指定します。クラスター オブジェクトを取得するには、parcluster を使用します。

例: c = parcluster; parpool(c)

名前と値のペアの引数

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

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

プールに付加するファイル。文字ベクトル、string、string 配列、または文字ベクトルの cell 配列として指定します。

parpool はこの引数ペアを使用して並列プールを起動し、指定されたファイルをプールのワーカーに渡します。ここで指定したファイルは、所定の並列プロファイルで指定された AttachedFiles プロパティに追加され、付加ファイルの完全なリストが生成されます。'AttachedFiles' のプロパティ名は大文字小文字を区別するため、表示どおりに指定しなければなりません。

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

データ型: char | cell

クライアントのパスにユーザーが追加したエントリを、起動時に各ワーカーのパスに追加するかどうかを制御する論理値 (true または false)。既定では、AutoAddClientPathtrue に設定されています。

データ型: logical

クライアント セッションからワーカーにコピーされる環境変数名。文字ベクトル、string、string 配列、または文字ベクトルの cell 配列として指定します。ここで指定した名前は、該当する並列プロファイルで指定された 'EnvironmentVariables' プロパティに追加され、環境変数の完全なリストが生成されます。リストされているが設定されていない変数はすべて、ワーカーにコピーされません。これらの環境変数は、並列プールの存在期間にわたってワーカーで設定されています。

データ型: char | cell

論理値として指定する、プールで SPMD のサポートが有効であるかどうかを示す指標。サポートを無効にできるのは、ローカル クラスターまたは MJS クラスターの場合のみです。parfor の反復ではワーカー間の通信は発生しないため、SPMD のサポートをこの方法で無効にすると、parfor ループの実行中に 1 つ以上のワーカーでループの実行が中止されても、並列プールはループの評価を継続することができます。

データ型: logical

出力引数

すべて折りたたむ

parallel.Pool オブジェクトとして返される、クライアントから並列プールへのアクセス。

ヒント

メモ:

parpool を含む何らかの並列コードを実行する場合は、MATLAB パスからすべての startup.m を削除してください。並列プールの起動に問題がある場合は、MATLAB Answers のページ (https://uk.mathworks.com/matlabcentral/answers/92124-why-am-i-unable-to-use-parpool-with-the-local-scheduler-or-validate-my-local-configuration-of-parall) を参照してください。

  • デスクトップの左下隅にあるプール ステータス インジケーターは、プールへのクライアント セッション接続とプールのステータスを表します。アイコンをクリックすると、サポートされているプール操作のメニューが表示されます。

    プールが実行中の場合: プールが実行中でない場合:

  • 並列設定で、必要に応じて並列プールを自動作成するよう設定されている場合、parpool コマンドを明示的に呼び出す必要はありません。プール セットアップ時のオーバーヘッド時間が発生するタイミングを制御する場合は、プールを明示的に作成し、そのプールを以降の並列言語構成で使用できます。

  • delete(poolobj) は並列プールをシャットダウンします。並列プールがない場合、spmdparfor はクライアント内で単一スレッドとして実行されます。ただし、並列設定で並列プールが自動起動するよう設定されている場合を除きます。

  • MATLAB エディターを使用して、並列プールに付加されているファイルをクライアント上で更新すると、更新内容は自動的にプール内のワーカーに伝播されます(この自動更新は Simulink® モデル ファイルには適用されません。更新されたモデル ファイルをワーカーに伝播するには、関数 updateAttachedFiles を使用します)。

  • 可能な場合には、ワーカーの作業フォルダーは MATLAB クライアント セッションの作業フォルダーと一致するように初期設定されます。次に、以下のコマンドをクライアントのコマンド ウィンドウに入力すると、プールのすべてのワーカーでも実行されます。

    これによって、全ワーカー上で作業フォルダーとコマンド検索パスを設定でき、これ以降、parfor ループなどのプールのアクティビティが適切なコンテキストで実行されるようになります。

    Windows® オペレーティング システムを使用するクライアントで cd でフォルダーを変更したり、addpath でパスを追加したりする際にワーカーに送信される値は可能な限りフォルダーの UNC パスです。これは、Linux® オペレーティング システムを使用するクライアントではフォルダーの絶対位置になります。

    これらのコマンドがクライアントで機能しない場合、ワーカー上で実行されることはありません。たとえば、addpath でクライアントがアクセスできないフォルダーを指定した場合、この addpath コマンドはワーカーで実行されません。ただし、作業フォルダーがクライアント上では設定できても、いずれかのワーカーで指定どおりには設定できないという場合は、クライアントのコマンド ウィンドウにエラー メッセージは表示されません。

    クライアントとワーカーのプラットフォームが同じではない、クライアントのローカル フォルダーまたはクライアントからマッピングされたフォルダーがワーカーからは同じ方法で使用できない、あるいはフォルダーが非共有ファイル システムにあるといった混合プラットフォーム環境では、このわずかな動作の違いに注意してください。たとえば、MATLAB クライアントを Microsoft® Windows オペレーティング システムで実行している一方で、MATLAB ワーカーはすべて Linux オペレーティング システムで実行している場合、addpath の同じ引数は両方のオペレーティング システムでは機能しません。このような場合には、関数 pctRunOnAll を使用してコマンドがすべてのワーカーで実行されるようにできます。

    クライアントとワーカーのもう 1 つの違いは、matlabroot フォルダーの下位フォルダーを表す addpath 引数がワーカーには設定されないということです。MATLAB インストール ベースは既にワーカーのパスに含まれているということが、ここでは仮定されています。プール内のワーカーに関する addpath のルールは以下のとおりです。

    • matlabroot フォルダーのサブフォルダーはワーカーに送信されない。

    • matlabroot フォルダーの最初の出現箇所より前に現れるすべてのフォルダーは、ワーカーのパスの先頭に追加される。

    • matlabroot フォルダーの最初の出現箇所より後に現れるすべてのフォルダーは、ワーカーのパス上で matlabroot グループのフォルダーの後に追加される。

    たとえば、クライアントの matlabrootC:\Applications\matlab\ であるとします。開いている並列プールに対して以下を実行し、クライアントとすべてのワーカーにパスを設定します。

    addpath('P1',
            'P2',
            'C:\Applications\matlab\T3',
            'C:\Applications\matlab\T4',
            'P5',
            'C:\Applications\matlab\T6',
            'P7',
            'P8');

    T3T4 および T6matlabroot のサブフォルダーであるためワーカーのパスには設定されません。したがって、ワーカーに対し、このコマンドによって設定されるパスの該当部分は以下のとおりです。

    P1
    P2
    <worker original matlabroot folders...>
    P5
    P7
    P8

R2013b で導入