【发布时间】:2020-05-22 21:05:22
【问题描述】:
我有一个相当大规模的优化问题,尽管问题本身相当简单。它只是二次+线性目标,具有线性约束。所以这个问题可以用cplexqp解决。问题的规模约为 1300 个变量,但我需要解决大约 200 个独立问题。
如果我只是循环超过 200 次并像往常一样调用 cplexqp,大约需要 16 分钟才能解决所有问题。我考虑使用并行计算,所以我将循环更改为 parfor,现在大约需要 14 分钟。考虑到我们有 12 个内核和 12 个工作线程,我原以为我们会获得更大的加速因子。
我确保并行工作器已经初始化(因此 MATLAB 不必花时间初始化它们)。我还验证了任务管理器中的所有 12 个工作线程都处于活动状态,并且它们都在使用大量的 CPU。
我的问题是:您是否认为 cplexqp 具有锁定机制,因为在给定时间(来自不同的线程?)不能调用多个问题(来自不同的线程?)如果我有不同的 MATLAB 进程怎么办? (例如,我可以将输入保存到一个文件中,并启动几个 MATLAB 会话来使用该文件,每个会话都会知道要解决哪个问题索引)。
16 分钟还不错,但我们可能需要每天多次执行此操作(输入可能不同),所以我想知道我们是否可以进一步加快这个过程。
TIA
【问题讨论】:
-
您的 CPU 利用率如何开始(不使用 parfor)?我猜 cplex 已经使用了多个内核,没有太多改进空间。
-
这很好。事实证明它一直在使用很多核心(利用率约为 60%)。这是有道理的,因为该算法需要处理画面的许多行并且它们都是“独立”的操作。