メインコンテンツ

プール ダッシュボード

並列プールでのアクティビティの監視および可視化

R2025a 以降

説明

対話型並列プールの監視データを収集して可視化するには、プール ダッシュボードを使用します。

このツールを使用すると、次のことが可能です。

  • parforparfevalspmd などの並列構造体をプール ワーカーがどのように実行するのかについて、監視データを収集する。

  • クライアントおよびワーカーによって送受信されるデータの量 (バイト単位) を追跡する。

  • 各ワーカーによる並列コード内の担当部分の処理に費やされる時間を把握する。

  • 通信パターンを調査し、ボトルネックや負荷分散の問題を特定する。

The Pool Dashboard shows the execution timeline, list of constructs and their parent functions, and a summary of worker activity.

プール ダッシュボード を開く

  • MATLAB® ツールストリップ: [ホーム] タブの [環境] セクションで、[並列][プール ダッシュボードを開く] を選択します。

  • 並列ステータス インジケーター: インジケーター アイコンをクリックし、[プール ダッシュボードを開く] を選択します。

  • MATLAB コマンド プロンプト: 「parpoolDashboard」と入力します。

すべて展開する

この例では、プール ダッシュボードを使用して、parfor を用いた並列計算におけるパフォーマンス ボトルネックを診断する方法を説明します。

大規模な行列から抽出した 2 行 2 列の部分行列の最大絶対固有値を計算する計算タスクがあります。最初に、for ループを使用して、このタスクを実装します。計算を高速化するため、for ループを parfor ループに変換し、6 つのワーカーをもつプールで、この parfor ループを実行します。実行時間を比較すると、parfor ループは、逐次的な for ループよりも大幅に長い時間を要しています。parfor ループの実行時間が逐次的な for ループよりも大幅に長い理由を調査するには、プール ダッシュボードを使用します。

逐次実行並列実行
n = 10000;
data = magic(n);
out = zeros(n,1);
tic
for idx = 2:n
    thisData = idx*data(idx-1:idx,idx-1:idx);
    out(idx) = max(abs(eig(thisData)));
end
toc
Elapsed time is 0.049732 seconds.
parpool("Processes",6)

n = 10000;
data = magic(n);
out = zeros(n,1);
tic
parfor idx = 2:n
    thisData = idx*data(idx-1:idx,idx-1:idx);
    out(idx) = max(abs(eig(thisData)));
end
toc
Elapsed time is 3.777290 seconds.

プール ダッシュボードを開きます。

監視データの収集を開始するには、[監視] セクションで [監視を開始] を選択します。現在、開いている並列プールがない場合は、並列プールを起動します。

監視データを収集するには、MATLAB コマンド ウィンドウで、次のコードを実行します。

n = 10000;
data = magic(n);
out = zeros(n,1);
parfor idx = 2:n
    thisData = idx*data(idx-1:idx,idx-1:idx);
    out(idx) = max(abs(eig(thisData)));
end

監視データを可視化します。[監視] セクションで、[更新] を選択します。プール ダッシュボードに監視結果が表示されます。

The Pool Dashboard shows the execution timeline, list of constructs and their parent functions, and a summary of worker activity from the executed code.

監視データを確認します。[タイムライン] グラフには、ワーカーおよびクライアントによる parfor ループの実行とデータ転送に費やされた時間が視覚的に表示されます。濃い青は parfor ループの実行に費やされた時間、薄い青はデータ送信に費やされた時間、マゼンタはデータ受信に費やされた時間を示しています。ワーカーが計算の最初の 2 ~ 3 秒をクライアントからのデータ受信に費やしていることがわかります。一部のワーカーは、クライアントからのデータ受信の待機にもかなりの時間を費やしています。

[タイムライン] グラフの下にある [ワーカーの概要] 表には、[タイムライン] グラフ内の情報がまとめられています。表全体を表示するには、[ワーカーの概要] 表の右側にある 3 つのドットをクリックし、[最大化] を選択します。

Worker Summary table title and head row shows the Maximize option on the right.

ワーカーが計算の実行に費やす時間は、データ転送と比べると短いです。クライアントが合計 4.47 GB のデータをワーカーに送信し、ワーカーは parfor ループの実行中にそれぞれ 762.95 MB のデータを受信していることが確認できます。parfor ループでは、すべてのワーカーが入力データのコピーを受信する必要があるため、for ループの場合には存在しないデータ転送のオーバーヘッドが計算に生じています。この高い並列オーバーヘッドが計算時間の大部分を占めており、for ループを parfor ループに変換しても利点が得られないことを示しています。

The Worker Summary panel of the Pool Dashboard displays a summary for the client and workers, including the busy time, the data send and receive time, and the amounts of data (in bytes) sent and received.

ただし、同じデータ セットを使用して parfor ループを複数回実行する必要がある場合は、Constant オブジェクトを使用して、入力データをワーカーに 1 回だけ転送することで、parfor ループを最適化できます。これは 1 回だけ発生するコストであり、Constant オブジェクトをクリアするまで、ワーカーはそのデータにアクセスできます。

Constant オブジェクトの使用がどのように parfor ループを最適化するかを理解するには、コマンド ウィンドウで次のコードを実行します。

n = 10000;
data = magic(n);
out = zeros(n,1);

C = parallel.pool.Constant(data);

parfor idx = 1:10
    c = C.Value;
end

parfor idx = 2:n
    thisData = idx.*C.Value(idx-1:idx,idx-1:idx);
    out(idx) = max(abs(eig(thisData)));
end
監視データを可視化します。[監視] タブの [監視] セクションで、[更新] を選択します。プール ダッシュボードによって監視結果の表示が更新されます。

The Pool Dashboard shows the execution timeline, list of constructs and their parent functions, and a summary of worker activity for all the previously executed code.

Constant オブジェクトを使用する parfor ループのみの監視データを表示するには、[並列構造体] パネルで表の最後の行を選択します。parfor ループの実行前に Constant オブジェクトを使用してデータをワーカーに転送した場合、ワーカーは計算の実行のみに時間を費やします。

The Pool Dashboard shows the execution timeline, list of constructs and their parent functions, and a summary of worker activity from the parfor-loop that uses the Constant object value.

監視データの収集を停止するには、[監視] セクションで [停止] を選択します。

関連する例

プログラムでの使用

すべて展開する

parpoolDashboard は、プール ダッシュボードを開きます。

parpoolDashboard(monitoringResults) はプール ダッシュボードを開き、ActivityMonitorResults オブジェクト monitoringResults 内の監視結果を表示します。

制限

  • プール ダッシュボードは、スレッド ワーカーの並列プールではサポートされていません。

  • プール ダッシュボードは、バッチ並列プールではサポートされていません。プログラムによるワークフローでは、代わりに ActivityMonitor オブジェクトを使用してください。詳細については、Programmatically Collect Pool Monitoring Dataを参照してください。

  • [タイムライン] グラフには、最大 32 のワーカーの情報のみが表示されます。

バージョン履歴

R2025a で導入

参考

関数

オブジェクト