主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

并行池仪表板

监控和可视化并行池上的活动

自 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 循环,并在具有六个工作单元的池上运行 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 循环所花费的时间,浅蓝色表示发送数据所花费的时间,品红色表示接收数据所花费的时间。您可以看到,工作单元在计算的前两到三秒钟内接收来自客户端的数据。一些工作单元也会花费大量时间等待从客户端接收数据。

位于时间线图下面的工作单元摘要表总结了上面时间线图中的信息。要查看整个表格,请点击工作单元摘要表格右侧的三个点,然后选择最大化

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 对象将输入数据只传输一次到工作单元,从而优化 parfor 循环。这是一次性费用,工作单元可以访问数据,直到您清除 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 对象代替。有关详细信息,请参阅以编程方式收集池监控数据

  • 时间线图仅显示最多 32 个工作单元的信息。

版本历史记录

在 R2025a 中推出