並列言語の意思決定表
MATLAB®、Parallel Computing Toolbox™、および MATLAB Parallel Server™ ソフトウェアには、より多くのハードウェア リソースを利用することが可能な自動並列サポートを備えた並列言語機能と関数が用意されています。
並列言語機能は、MATLAB コードの並列化に役立ちます。一般的な並列機能の例については、並列計算言語機能の選択を参照してください。
並列言語機能を選択した後、並列 MATLAB コードをどこで実行するかを決めます。詳細については、ワークフローの選択を参照してください。
一部の関数には、自動並列サポートが備わっています。外部の並列言語機能を選択することなく
UseParallel
オプションを有効にすることができます。詳細については、自動並列サポートを使用した MATLAB 関数の実行を参照してください。
並列計算言語機能の選択
次の表を使用して、用途に応じて並列言語機能を選択するための参考にしてください。関数を非同期的に実行する場合、MATLAB では同時にフォアグラウンドで他のコードを実行できます。
用途の例 | 関数 | 説明 | ワーカー間の通信 | 同期または非同期 |
---|---|---|---|---|
| parfor | 各反復が他のすべての反復から独立した並列 for ループ。 | なし | 同期 |
| parsim (Simulink) | 動的システムを並列または逐次で複数回シミュレートする。 | なし | 同期 |
| parfeval | 並列プール ワーカーで関数を実行する。 | なし | 非同期 |
並列プール内の並列ワーカーの環境を設定する。 | parfevalOnAll | 対話型並列プールのすべてのワーカーで関数を非同期で実行する。 | なし | 非同期 |
MATLAB 関数を GPU で使用する。 | gpuArray | サポートされる関数に GPU 配列を渡してコードを GPU で実行する。 | なし | 同期 |
| spmd | 並列プールのすべてのワーカーでコードのブロックを並列で実行する。 | あり | 同期 |
| distributed | 分散配列と spmd コード ブロックを使用して大規模な多次元データを並列で解析する。 | あり | 同期 |
| tall | デスクトップ、クラスター、または Hadoop® クラスターで並列プールを使用して tall 配列の式を並列で評価する。 | あり | 同期 |
ワークフローの選択
対話型ワークフロー
対話型ワークフローは、parpool
を使用してワーカーの並列プールで並列コードを実行する場合に使用します。対話型ワークフローでは、準備ができた時点ですぐに結果を確認できます。ただし、現在の MATLAB クライアント セッションを閉じた後はデータを取得できません。
対話型ワークフローを使用するには、MATLAB コードで parfor
、parfeval
、parfevalOnAll
、spmd
、distributed
、および tall
を呼び出します。これらの関数を呼び出すと自動的に並列プールが起動されます。詳細については、並列プールでのコードの実行を参照してください。
gpuArray
を使用して、MATLAB ワークスペース内の配列を gpuArray
オブジェクトに変換します。gpuArray
対応の任意の MATLAB 関数を使用して gpuArray
オブジェクトを操作できます。詳細については、GPU での MATLAB 関数の実行を参照してください。
バッチ ワークフロー
バッチ ワークフローは、計算クラスターに作業をオフロードして他のタスクを実行する場合や、実行時間の長いコードを後で実行するために送信する場合に使用します。バッチ ワークフローでは、ジョブの処理中に MATLAB クライアント セッションを閉じてもかまいません。MATLAB ではバッチ ジョブに関する情報が保存されるため、後から、あるいは新しいクライアント セッションでバッチ ジョブの結果を取得できます。
バッチ ワークフローでは、バッチ ワークフローでの他の任意の MATLAB 関数とともに parfor
、parfeval
、gpuArray
、spmd
、distributed
、および tall
の並列言語機能がサポートされます。次の表のいずれかのバッチ並列言語機能を使用して、コードをスクリプトまたは関数として送信します。詳細については、バッチ並列ジョブの実行を参照してください。
用途の例 | 関数 | 説明 | ワーカー間の通信 | 同期または非同期 |
---|---|---|---|---|
関数またはスクリプトの実行をオフロードしてクラスターまたはデスクトップのバックグラウンドで実行する。 | batch | MATLAB スクリプトまたは関数をオフロードしてワーカーで実行する。 | なし | 非同期 |
並列シミュレーションをバッチでオフロードする。 | batchsim (Simulink) | シミュレーションをオフロードして計算クラスターで実行する。 | なし | 非同期 |
| batch (__,Pool=...) | MATLAB スクリプトまたは関数をオフロードしてワーカーの並列プールで実行する。 | あり | 非同期 |
| createJob | 任意の数のタスクをクラスターの独立したワーカーにオフロードする。タスクは関数またはスクリプトのいずれかとする。 | なし | 非同期 |
| createCommunicatingJob | 1 つのタスクをクラスターの通信ワーカーにオフロードする。 | あり | 非同期 |
メモ
バッチ関数は対話型並列プールでは使用できません。ワーカーのプールをバッチ実行に使用するコードを投入するには、batch(__,Pool=...)
または createCommunicatingJob
を使用します。
参考
parfor
| parsim
(Simulink) | parfeval
| parfevalOnAll
| gpuArray
| spmd
| distributed
| tall
| batch
| batchsim
(Simulink) | createJob
| createCommunicatingJob