Main Content

createCommunicatingJob

クラスターに通信ジョブを作成する

構文

job = createCommunicatingJob(cluster)
job = createCommunicatingJob(...,'p1',v1,'p2',v2,...)
job = createCommunicatingJob(...,'Type','pool',...)
job = createCommunicatingJob(...,'Type','spmd',...)
job = createCommunicatingJob(...,'Profile','profileName',...)

説明

job = createCommunicatingJob(cluster) は、指定されたクラスターに通信ジョブ オブジェクトを作成します。

job = createCommunicatingJob(...,'p1',v1,'p2',v2,...) は、指定されたプロパティ値をもつ通信ジョブ オブジェクトを作成します。作成されたオブジェクトの有効なプロパティのリストは、parallel.Job オブジェクトのリファレンス ページを参照してください。プロパティ名は文字ベクトルでなければならず、その値はそのプロパティに適した型でなければなりません。ほとんどの場合、これらのプロパティと値のペアで指定された値によって、プロファイルの値がオーバーライドされます。

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

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

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

AttachedFiles または AdditionalPaths を指定する場合は、その値が、該当するプロファイルで指定されている値と結合されます。無効なプロパティ名またはプロパティ値が指定された場合、オブジェクトは作成されません。

job = createCommunicatingJob(...,'Type','pool',...) では、'pool' タイプの通信ジョブが作成されます。'Type' が指定されていない場合、これが既定のタイプになります。'pool' ジョブは parfor ループまたは spmd ブロックの本体の実行に使用できる並列プールを使用して、指定されたタスク関数を実行します。1 つのワーカーのみがタスク関数を実行し、クラスター内の他のワーカーは並列プールを形成することに注意してください。このため、'pool' タイプのジョブの N 個のワーカーからなるクラスターでは、N-1 個のワーカーのみが、タスク関数内にある spmd および parfor コードを実行する実際のプールを形成します。

job = createCommunicatingJob(...,'Type','spmd',...) はタイプ 'spmd' の通信ジョブを作成します。指定されたタスク関数はすべてのワーカー上で同時に実行され、関数 spmd* はワーカー間の通信に使用できます。

job = createCommunicatingJob(...,'Profile','profileName',...) は、プロファイル 'profileName' で指定されたプロパティ値をもつ通信ジョブ オブジェクトを作成します。プロファイルが指定されておらず、クラスター オブジェクトの 'Profile' プロパティに値が指定されている場合は、自動的にクラスターのプロファイルが適用されます。

例1 プール タイプの通信ジョブ

parfor ループを使用する関数 'myFunction' を考えてみましょう。

function result = myFunction(N)
    result = 0;
    parfor ii=1:N
        result = result + max(eig(rand(ii)));
    end
end

既定のクラスターで myFunction を評価する通信ジョブ オブジェクトを作成します。

myCluster = parcluster;
j = createCommunicatingJob(myCluster,'Type','pool'); 

入力引数を指定して、このジョブにタスクを追加します。

createTask(j, @myFunction, 1, {100});

並列実行に必要なワーカーの数を設定します。

j.NumWorkersRange = [5 10];

ジョブを実行します。

submit(j);

ジョブの完了を待ち、結果を取得します。

wait(j)
out = fetchOutputs(j)

クラスターからジョブを削除します。

delete(j);

バージョン履歴

R2012a で導入