バッチ並列ジョブの実行

バッチ ジョブの実行

MATLAB® セッションの負荷をオフロードして別のセッションでバックグラウンドで実行するために、スクリプト内で batch コマンドを使用できます。

  1. スクリプトを作成するには、次のように入力します。

    edit mywave
  2. MATLAB エディターで、for ループを作成します。

    for i = 1:1024
      A(i) = sin(i*2*pi/1024);
    end
  3. ファイルを保存してエディターを閉じます。

  4. MATLAB コマンド ウィンドウで batch コマンドを使用して、独立した MATLAB ワーカーでスクリプトを実行します。

    job = batch('mywave')

  5. batch は MATLAB をブロックしないため、計算の実行中に作業を続行できます。ジョブが完了するまで MATLAB をブロックする必要がある場合は、ジョブ オブジェクトに対して関数 wait を使用します。

    wait(job)
  6. ジョブの終了後、その結果を取得して表示することができます。load コマンドによって、ワーカーで作成された変数がクライアント ワークスペースに転送され、そこで結果を表示することができます。

    load(job,'A')
    plot(A)
  7. ジョブが完了したら、そのデータを永久的に削除し、その参照をワークスペースから削除します。

    delete(job)
    clear job

batch はコードをローカル ワーカーまたはクラスター ワーカーで実行しますが、並列プールは必要ではありません。

batch を使用してスクリプトまたは関数を実行できます。詳細は、関数 batch のリファレンス ページを参照してください。

並列プールでのバッチ ジョブの実行

ジョブをオフロードする機能と並列プールでループを実行する機能は組み合わせることができます。この例では、この 2 つを組み合わせてシンプルなバッチの parfor ループを作成します。

  1. スクリプトを作成するには、以下を入力します。

    edit mywave
  2. MATLAB エディターで、parfor ループを作成します。

    parfor i = 1:1024
      A(i) = sin(i*2*pi/1024);
    end
  3. ファイルを保存してエディターを閉じます。

  4. MATLAB で batch コマンドを使用してスクリプトを実行します。スクリプトではループに並列プールが使用されるように指定します。

    job = batch('mywave','Pool',3)

    このコマンドでは、(バッチ スクリプトを実行するワーカーの他に) 3 つのワーカーでループ反復を評価するよう指定しています。したがって、この例ではバッチ スクリプトを実行する 1 つのワーカーを含め、合計で 4 つのローカル ワーカーを使用します。次の図のように、実行される MATLAB セッションは全部で 5 つあります。

  5. 結果を表示するには、以下を入力します。

    wait(job)
    load(job,'A')
    plot(A)

    結果は前と同じように見えますが、実行方法に 2 つの重要な違いがあります。

    • parfor ループを定義して結果を累積する作業が batch により別の MATLAB セッションにオフロードされる。

    • ループの反復が、1 つの MATLAB ワーカーから同時実行される別の一連のワーカーに分散されるため ('Pool'parfor)、ループがただ 1 つのワーカーで実行される場合より高速で実行される可能性がある。

  6. ジョブが完了したら、そのデータを永久的に削除し、その参照をワークスペースから削除します。

    delete(job)
    clear job

現在のフォルダー ブラウザーでのスクリプトのバッチ ジョブとしての実行

現在のフォルダー ブラウザーから MATLAB スクリプトをバッチ ジョブとして実行できます。それには、ファイルのフォルダーを参照し、ファイルを右クリックして [バッチ ジョブとしてスクリプトを実行] を選択します。バッチ ジョブは既定のクラスター プロファイルにより指定されているクラスター上で実行されます。次の図はスクリプト ファイル script1.m を実行するメニュー オプションを示しています。

ブラウザーからスクリプトをバッチとして実行する際は、クラスターのワーカーを 1 つだけ使用します。このため、スクリプトに parfor ループまたは spmd ブロックが含まれている場合でも、クラスターのワーカー プールが追加で開くことはありません。こうしたコード ブロックはバッチ ジョブに使用される単一のワーカーで実行されます。バッチ スクリプトで追加のワーカー プールを開く必要がある場合は、並列プールでのバッチ ジョブの実行で説明したように、コマンド ラインから実行できます。

ブラウザーからバッチ ジョブを実行する場合は、ジョブ モニターも開かれます。ジョブ モニターはスケジューラ キューのジョブを追跡できるツールです。ジョブ モニターとその機能についての詳細は、ジョブ モニターを参照してください。

参考

関連するトピック