在 Optimization Toolbox 中使用并行计算
使用多核处理器执行并行计算
如果您有多核处理器,可以通过使用并行处理来提高处理速度。您可以使用一个 Parallel Computing Toolbox™ 许可证建立由多个工作进程组成的并行池。有关 Parallel Computing Toolbox 软件的描述,请参阅 Get Started with Parallel Computing Toolbox (Parallel Computing Toolbox)。
假设您有双核处理器,并且要使用并行计算。请在命令行中输入以下代码。
parpool
MATLAB® 会启动使用多核处理器的工作进程池。如果您之前设置了非默认集群配置文件,则可以通过输入以下代码来实现多核(本地)计算。
parpool('local')
注意
根据您的预设项,MATLAB 可以自动启动并行池。要启用此功能,请在主页选项卡上的环境组中选择 Parallel > Parallel Preferences,然后选择 Automatically create a parallel pool。
设置求解器选项以使用并行计算。
options = optimoptions('solvername','UseParallel',true);
使用 options
运行适用的求解器时,适用的求解器会自动使用并行计算。
要停止并行计算优化,请将 UseParallel
设置为 false
。要停止所有并行计算,请输入以下代码。
delete(gcp)
注意
文档建议在调用 Simulink® 时不要使用 parfor
或 parfeval
;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。
在多处理器网络中使用并行计算
如果网络上有多个处理器,请使用 Parallel Computing Toolbox 函数和 MATLAB Parallel Server™ 软件来建立并行计算。
请确保您的系统针对并行计算进行了正确配置。请咨询系统管理员,或参考 Parallel Computing Toolbox 文档。
通过输入以下代码执行基本检查,其中
prof
是您的集群配置文件。parpool(prof)
工作进程必须能够访问您的目标函数文件,以及(如果适用)您的非线性约束函数文件。完成以下步骤之一以确保可以访问:
使用
parpool
(Parallel Computing Toolbox)AttachedFiles
参量将文件分发给工作进程。在此示例中,objfun.m
是您的目标函数文件,constrfun.m
是您的非线性约束函数文件。parpool('AttachedFiles',{'objfun.m','constrfun.m'});
工作进程可以访问它们自己的文件副本。
给出目标或约束函数文件的网络文件路径。
pctRunOnAll('addpath network_file_path')
工作进程通过网络访问函数文件。
检查文件是否在每个工作进程的路径中。
如果任一工作进程没有该文件的路径,则它会报告pctRunOnAll('which filename')
filename not found.
设置求解器选项以指定使用并行计算。参量 'solvername'
表示支持并行计算的非线性求解器。
options = optimoptions('solvername','UseParallel',true);
建立并行计算环境后,只要您使用 options
调用适用的求解器,它们就会自动使用并行计算。
要停止并行计算优化,请将 UseParallel
设置为 false
。要停止所有并行计算,请输入以下代码。
delete(gcp)
注意
文档建议在调用 Simulink 时不要使用 parfor
或 parfeval
;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。
测试并行计算
按照以下步骤进行操作,以测试您的问题是否能以并行方式正确运行。
在不使用并行计算的情况下尝试运行您的问题,以确保它以串行方式运行。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。
将
UseParallel
设置为true
,并通过输入delete(gcp)
确保不存在并行池。要确保 MATLAB 不会创建并行池,请在主页选项卡上的环境组中选择 Parallel > Parallel Preferences,然后清除 Automatically create a parallel pool。您的问题将以串行方式运行parfor
,循环迭代顺序与for
循环相反。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。将
UseParallel
设置为true
,并使用parpool
创建一个并行池。除非您有多核处理器或网络设置,否则此测试不会提高处理速度。此测试只简单用于验证计算的正确性。
请记住使用 options
参量调用您的求解器来测试或使用并行功能。