使用parfor从MATLAB生成的cplex

问题描述 投票:0回答:1

我有一个规模较大的优化问题,尽管该问题本身非常简单。它只是具有线性约束的二次线性目标。因此,使用cplexqp可解决此问题。问题的规模大约是1300个变量,但我需要解决约200个独立问题。

如果我仅循环200次以上并照常调用cplexqp,则大约需要16分钟才能解决所有问题。我考虑使用并行计算,因此将循环更改为parfor,现在大约需要14分钟。考虑到我们有12个核心和12个工人,我本来以为我们会获得更大的加速因子。

我确保并行工作器已经初始化(因此MATLAB不必花时间初始化它们)。我还验证了所有12个工作线程在任务管理器中都处于活动状态,并且每个线程都使用了数量不小的CPU。

我的问题是:您认为cplexqp具有一种锁定机制,因为在给定的时间不能从多个线程调用一个以上的问题吗?如果我有不同的MATLAB进程怎么办? (例如,我可以将输入保存到文件中,并启动几个MATLAB会话来使用该文件,并且每个会话都知道要解决的问题索引)。

16分钟还不错,但是我们可能需要一天多次执行此操作(可能会有不同的输入),所以我想知道我们是否可以进一步加快该过程。

TIA

matlab cplex parfor
1个回答
0
投票

问题是,默认情况下,CPLEX将在您的计算机上使用all内核来解决one问题。因此,如果您尝试并行解决多个问题,那么您将严重超额订购CPU。这可能会导致整体速度下降。

因此,您应该仔细选择并行求解的模型以及每个求解允许的核数。如果使用parfor,则应使用Cplex.Param.threads参数来限制单个求解的核数,或者,选择单纯形算法来求解您的QP。

整个并行化是否为您提供整体加速取决于通过限制线程数对各个模型观察到的减速程度。

© www.soinside.com 2019 - 2024. All rights reserved.