Main Content

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

集群工作进程基准测试

此示例显示如何在集群工作进程上运行 MATLAB® 基准。基准测试了几个 MATLAB 计算的执行速度。您可以绘制这些结果并比较客户端和工作进程的表现。

此示例使用 pbench,该函数运行 bench(MATLAB 基准)中的部分测试。该子集中的测试包括 LU、FFT、ODE 和 Sparse。有关这些测试的详细信息,请参阅 bench

在客户端上运行 MATLAB 基准。

tClient = pbench
tClient = 1×4

    0.0766    0.0725    0.0194    0.1311

使用 parpool 函数创建并行池 p。默认情况下,parpool 会在默认集群上启动一个带有工作进程的并行池。在 MATLAB 主页选项卡上的环境区域中的并行 > 选择默认集群中选择您的默认集群。

p = parpool();
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

使用 parfevalOnAll 函数在工作进程上运行 MATLAB 基准测试。parfevalOnAll 将函数的执行卸载到池中的所有工作进程,并在结果准备就绪时返回 parallel.FevalOnAllFuture 对象来保存结果。要从工作进程那里获得结果,请在未来对象上使用 fetchOutputs

f = parfevalOnAll(@pbench,1);
tWorkers = fetchOutputs(f);

结合客户端和工作进程的结果,并使用条形图绘制它们。比较工作进程和客户端的相对表现。

tClientAndWorkers = [tClient;tWorkers];
bar(tClientAndWorkers');
xticklabels({'LU','FFT','ODE','Sparse'});
xlabel("Benchmark type");
ylabel("Benchmark execution time (seconds)");
workerNames = strcat("Worker ",string(1:size(tWorkers,1)));
legend(["Client",workerNames],'Location','bestoutside');

默认情况下,MATLAB 客户端启用多线程。多线程使 MATLAB 数值函数(例如 lufft)能够使用多个计算线程在多个核心上运行。工作进程默认使用单个计算线程,因为它们通常与单个核心相关联。因此,例如,LU 测试在 MATLAB 客户端上的运行速度比在工作进程上的运行速度更快。其他问题,例如 ODE,无法从多线程中受益,因此它们在 MATLAB 客户端和工作进程上执行相同的操作。在决定是否将计算分配给 MATLAB 并行工作进程(例如 parfor)时,请考虑这种差异。有关详细信息,请参阅 决定何时使用 parfor。有关多线程的更多信息,请参阅在多核和多处理器机器上运行 MATLAB

另请参阅

| | |

相关主题