运行批量并行作业
运行批处理作业
要将工作从 MATLAB® 会话卸载到另一个会话的后台运行,您可以在脚本中使用 batch
命令。
要创建脚本,请输入:
edit mywave
在 MATLAB 编辑器中,创建一个
for
循环:for i = 1:1024 A(i) = sin(i*2*pi/1024); end
保存文件并关闭编辑器。
使用 MATLAB 命令行窗口中的
batch
命令在单独的 MATLAB 工作单元上运行脚本:job = batch('mywave')
batch
不会阻止 MATLAB,您可以在进行计算时继续工作。如果需要阻止 MATLAB 直到作业完成,请在作业对象上使用wait
函数。wait(job)
作业完成后,您可以检索并查看其结果。
load
命令将在工作单元上创建的变量传输到客户端工作区,您可以在其中查看结果:load(job,'A') plot(A)
当作业完成后,永久删除其数据并从工作区中删除其引用:
delete(job) clear job
batch
在本地工作单元或集群工作单元上运行您的代码,但不需要并行池。
您可以使用 batch
来运行脚本或函数。有关更多详细信息,请参阅 batch
参考页。
使用并行池运行批处理作业
您可以结合这些能力来卸载作业并在并行池中运行循环。此示例将两者结合起来,创建一个简单的批量 parfor
循环。
要创建脚本,请输入:
edit mywave
在 MATLAB 编辑器中,创建一个
parfor
循环:parfor i = 1:1024 A(i) = sin(i*2*pi/1024); end
保存文件并关闭编辑器。
使用
batch
命令运行 MATLAB 中的脚本。表明脚本应该使用并行池进行循环:job = batch('mywave','Pool',3)
此命令指定三个工作单元(除了运行批处理脚本的工作程序之外)来评估循环迭代。因此,本示例总共使用了四个本地工作单元,其中包括一个运行批处理脚本的工作单元。总共涉及五个 MATLAB 会话,如下图所示。
查看结果:
wait(job) load(job,'A') plot(A)
结果看起来与以前相同,但是在执行上有两个重要的区别:
定义
parfor
循环并累积其结果的工作被batch
卸载到另一个 MATLAB 会话。循环迭代从一个 MATLAB 工作单元分布到另一组同时运行的工作单元(
'Pool'
和parfor
),因此循环运行速度可能比仅有一个工作单元执行的速度更快。
当作业完成后,永久删除其数据并从工作区中删除其引用:
delete(job) clear job
从文件面板以批处理作业运行脚本
在“文件”面板中,您可以通过浏览到文件的文件夹、右键点击文件,然后选择将脚本作为批处理作业运行来运行一个 MATLAB 脚本作为批处理作业。批处理作业在默认集群配置文件所标识的集群上运行。下图显示了运行脚本文件 myScript.m
的选项:
从“文件”面板以批处理方式运行脚本时,仅使用集群中的一个工作单元。因此即使脚本包含 parfor
循环或 spmd
代码块,它也不会在集群上打开额外的工作单元池。这些代码块在用于批处理作业的单个工作单元上执行。如果您的批处理脚本需要打开额外的工作单元池,您可以从命令行运行它,如使用并行池运行批处理作业中所述。
从“文件”面板运行批处理作业时,也会打开“作业监控程序”。作业监控程序是一种可以让您跟踪调度器队列中的作业的工具。有关作业监控程序及其功能的更多信息,请参阅 作业监控程序。