Main Content

createCommunicatingJob

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

    説明

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

    j = createCommunicatingJob(___,Name=Value) は、1 つ以上の名前と値の引数を使用して、通信ジョブ オブジェクトのプロパティも指定します。

    サポートされるオブジェクト プロパティのリストについては、parallel.Job を参照してください。ほとんどの場合、指定した値によってクラスター プロファイルの値がオーバーライドされます。AttachedFiles または AdditionalPaths を指定した場合、ソフトウェアによってその値が該当するプロファイルの値と結合されます。無効なプロパティの名前または値を指定した場合、ソフトウェアはオブジェクトを作成しません。

    j = createCommunicatingJob(___,Type=jobType) は、通信ジョブのタイプを pool または spmd として指定します。pool ジョブは使用できる並列プールを使用して、指定されたタスク関数を実行します。spmd ジョブは、指定されたタスク関数をすべてのワーカー上で同時に実行します。ワーカー間の通信には関数 spmd* を使用できます。

    j = createCommunicatingJob(___,Profile=profileName) は、プロファイル profileName に対応するプロパティ値をもつ通信ジョブ オブジェクトを作成します。プロファイルを指定しない場合、ソフトウェアにより、クラスター オブジェクト clusterProfile プロパティが適用されます。

    すべて折りたたむ

    この例では、プール タイプの通信ジョブを作成し、投入する方法を説明します。

    既定のクラスター上に通信ジョブ オブジェクトを作成します。

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

    関数 maxEig に対する関数ハンドルを使用して、タスクをジョブに追加します。この関数は、parfor ループを使用して乱数行列の最大固有値を計算します。この関数については、この例の最後で定義しています。parfor ループ内のステートメントを実行するために、maxEig 関数にはプール タイプの通信ジョブが必要です。

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

    ジョブ プロパティ NumWorkersRange を使用して、並列実行に必要なワーカーの数を設定します。

    j.NumWorkersRange = [5 10];

    ジョブを実行します。

    submit(j);

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

    wait(j)
    out = fetchOutputs(j)
    out = 1×1 cell array
        {[2.5248e+03]}
    
    

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

    delete(j);

    サポート関数

    関数 maxEig は、parfor ループを使用して、ランダムに生成され、サイズが増加していく行列の最大固有値を計算します。

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

    入力引数

    すべて折りたたむ

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

    例: parcluster;

    データ型: parallel.Cluster

    通信ジョブのタイプ。以下のオプションのいずれかとして指定します。

    • "pool" ジョブ — 並列プールを使用して、指定されたタスク関数を実行します。並列プールでは、タスク関数内の parforspmd などの並列関数の本体が実行されます。

      NumWorkersRange の値を次のいずれかに設定することにより、並列プールに加えられるワーカーの数を指定できます。

      • 非負の整数。

      • 非負の整数の 2 要素ベクトル。これは範囲として解釈されます。この結果生成される並列プールのサイズは、要求された範囲内で最大のサイズとなります。

      並列プールの 1 つのワーカーがタスク関数を実行します。したがって、N 個のワーカーをもつプールでのプール タイプのジョブでは、N – 1 個のワーカーのみによりタスク関数内の parfor コードおよび spmd コードが実行されます。

      createCommunicatingJob は、最大 2000 個のワーカーをもつプールをサポートします。 (R2024a 以降)

    • "spmd" — 指定されたタスク関数をすべてのワーカー上で同時に実行します。ワーカー間の通信に spmdSendspmdReceive などの通信関数を使用できます。

    データ型: char | string

    クラスター プロファイル。文字ベクトルまたは string スカラーとして指定します。

    例: "Processes" は、プロファイル Processes に指定されたプロパティ値をジョブに適用します。

    データ型: char | string

    出力引数

    すべて折りたたむ

    ジョブ。parallel.Job オブジェクトとして返されます。

    データ型: parallel.Job

    ヒント

    • コードの開発とテストを行うには、クライアント マシン上のローカル クラスターでバッチ ジョブを実行します。MATLAB® セッションを閉じると、ローカル クラスターを使用するバッチ ジョブもすべてただちに停止します。

    • 作業をリモート クラスターにオフロードすると、ジョブの処理中に MATLAB クライアント セッションを閉じ、後から、あるいは新しいクライアント セッションでバッチ ジョブから情報を取得できます。

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

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

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

    バージョン履歴

    R2012a で導入

    すべて展開する