集群工作进程基准测试
此示例显示如何在集群工作进程上运行 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 数值函数(例如 lu
或 fft
)能够使用多个计算线程在多个核心上运行。工作进程默认使用单个计算线程,因为它们通常与单个核心相关联。因此,例如,LU 测试在 MATLAB 客户端上的运行速度比在工作进程上的运行速度更快。其他问题,例如 ODE,无法从多线程中受益,因此它们在 MATLAB 客户端和工作进程上执行相同的操作。在决定是否将计算分配给 MATLAB 并行工作进程(例如 parfor
)时,请考虑这种差异。有关详细信息,请参阅 决定何时使用 parfor。有关多线程的更多信息,请参阅在多核和多处理器机器上运行 MATLAB。
另请参阅
bench
| parpool
| parfevalOnAll
| fetchOutputs