ドキュメンテーション

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

バッチ並列ジョブの実行

バッチ ジョブの実行

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 をブロックしないため、結果を取得して表示するには、ジョブが完了するまで待機しなければなりません。

    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

参考