主要内容

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

并行池仪表板

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

自 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.

打开并行池仪表板并启动一个进程工作单元池。

parpoolDashboard
pool = parpool("Processes");

parfor 循环代码保存为一个名为 parforPoolDashboard.m 的脚本。在 MATLAB 命令行窗口中,输入 edit parforPoolDashboard。然后将这段代码复制到新文件中并保存。

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

要开始收集监控数据,请在并行池仪表板监控部分中,在输入要运行的代码并监控框内输入 parforPoolDashboard,然后点击运行并监控。代码执行完毕后,并行池仪表板将显示监控结果。

在 R2026a 之前的版本中: 要开始收集监控数据,请在并行池仪表板监控部分中选择开始监控。切换到 MATLAB 命令行窗口,并输入 parforPoolDashboard。要查看代码执行完成后的监控数据,请返回并行池仪表板,然后在监控部分中选择停止并行池仪表板显示监控结果。

审查监控数据。

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 循环,请修改 parforPoolDashboard 脚本,并使用并行池仪表板重新运行它。在 MATLAB 命令行窗口中,输入 edit parforPoolDashboard。删除现有代码,然后将此代码复制并粘贴到脚本中,最后保存文件。

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

输入要运行的代码并监控框中输入 parforPoolDashboard,然后点击运行并监控。代码执行完毕后,并行池仪表板会更新显示的监控结果。

在 R2026a 之前的版本中: 要开始收集监控数据,请在并行池仪表板监控部分中选择开始监控。切换到 MATLAB 命令行窗口,并输入 parforPoolDashboard。要查看代码执行完成后的监控数据,请返回并行池仪表板,然后在监控部分中选择停止并行池仪表板显示监控结果。

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.

相关示例

参数

全部展开

显示器

自 R2026a 起

输入要运行的代码并监控框中输入或粘贴您希望在工作单元上运行的并行代码。要开始监控,请点击运行并监控

您还可以从并行池仪表板中之前运行过的代码列表中进行选择。

时间轴选项

自 R2026a 起

选择或输入,以指定并行池仪表板时间线图中显示的工作单元数量。当您按下 Enter 或点击最大工作单元数框外的区域时,软件会更新时间线图,以显示指定数量的工作单元。

编程用途

parpoolDashboard 打开并行池仪表板

parpoolDashboard(monitoringResults) 打开并行池仪表板,并在 ActivityMonitorResults 对象 monitoringResults 中显示监控结果。

限制

  • 在 R2026a 之前的版本中: 并行线程工作单元池不支持并行池仪表板

  • 并行池仪表板在监控线程工作单元池的活动时,不会跟踪数据传输情况。

  • 并行池仪表板不支持批处理并行池。要监控批处理并行池,请使用包含 ActivityMonitor 对象的编程工作流。有关详细信息,请参阅以编程方式收集池监控数据

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

  • 使用 parpool("Threads") 创建的 ThreadPools 以及 BackgroundPool 都是基于线程的资源池,它们使用相同的资源。一个池中的活动可能会阻塞另一个池中的活动。如果您同时使用这两个池,并在 ThreadPool 上监控活动情况,那么并行池仪表板只会收集 ThreadPool 所使用的工作单元的数据。时间线图以灰色标示工作单元何时为另一个池执行工作,并在图例中标注了另一个池的类型。

版本历史记录

在 R2025a 中推出

全部展开