利用并行计算提高性能
影响速度的因素
一些因素可能会影响并行处理的执行速度:
并行开销。调用有开销
parfor
而不是为
.如果函数计算速度很快,这个开销就会变得相当可观。特别是,并行解决问题比串行解决问题要慢。没有嵌套
parfor
循环。这在嵌套并行函数.parfor
当从另一个内部调用时,不并行工作parfor
循环。如果你的目标或约束函数的编程利用并行处理,限制没有嵌套parfor
循环可能导致求解器运行比预期的慢。特别地,有限差分的并行计算优先,因为这是一个外循环。这将导致目标函数或约束函数内的任何并行代码串行执行。当串行执行时,
parfor
循环运行速度比为
循环。因此,为了获得最佳性能,请确保只有最外层的并行循环调用parfor
.例如,假设您的代码调用fmincon
在一个parfor
循环。在本例中,为获得最佳性能,请设置fmincon
UseParallel
选项假
.传递参数。在并行计算的执行过程中,参数会自动传递给工作机器。如果有大量参数,或者它们占用大量内存,传递它们可能会减慢计算的执行速度。
资源争夺:网络和计算。如果工作机器的网络带宽低或延迟高,计算就会变慢。
影响结果的因素
在使用并行处理时,一些因素可能会影响数值结果。还有更多的注意事项parfor
中列出的并行for循环(parfor)(并行计算工具箱).
持久变量或全局变量。如果您的目标函数或约束函数使用持久变量或全局变量,这些变量在不同的工作处理器上可能具有不同的值。此外,它们可能无法在工作处理器上被正确清除。求解器可能抛出大小不匹配等错误。
访问外部文件。在并行计算期间,外部文件可能以不可预知的方式访问。并行处理期间计算的顺序不能保证,因此外部文件可能以不可预知的顺序访问,从而导致不可预知的结果。
访问外部文件。如果两个或多个处理器试图同时读取一个外部文件,该文件可能会被锁定,导致读取错误,并停止优化的执行。
如果你的目标函数调用Simulink金宝app®时,并行梯度估计的结果可能不可靠。
非计算函数,例如
输入
,情节
,键盘
,在目标函数或约束函数中使用时可能表现不佳。当被叫到parfor
循环中,这些函数在工作机器上执行。这可能导致工作线程变得无响应,因为它正在等待输入。parfor
不允许打破
或返回
语句。
正在搜索全局优化
为了搜索全局最优,一种方法是从各种初始点评估求解器。方法将这些计算分布在多个处理器上parfor
函数,则禁用并行梯度估计,因为parfor
循环不能嵌套。如果将计算分布在所有处理器上,而不是使用并行梯度估计串行运行它们,优化通常会运行得更快,因此禁用并行估计可能不会减慢计算速度。但是,如果处理器比初始点多,则不清楚是分配初始点更好,还是启用并行梯度估计更好。
如果你有全局优化工具箱许可证,你可以使用MultiStart
(全局优化工具箱)并行地检查多个起始点的求解器。看到并行计算(全局优化工具箱)而且平行MultiStart(全局优化工具箱).