我正在使用带有 Java 的单线程 CPLEX(在 Linux 下)对线性程序 (LP) 进行建模和求解。我的目标是在并行线程中解决多个小型 LP,理想情况下每个内核独立解决一个 LP。
问题是并行求解两个或多个 LP 比求解单个 LP 慢得多。在一个非常简单的测试中,我同时启动了多个相同的进程来解决相同的 LP。启动单个进程和启动多个进程之间的运行时差异是巨大的:
- 1 个过程:180 秒
- 2 个进程:225 秒
- 3 个过程:280 秒
同样,从同一进程启动多个线程以同时解决多个 LP 比解决单个 LP 慢得多。
我怀疑内存访问可能是瓶颈,但测试一段经常读写内存的代码会产生类似的运行时:
- 1 个过程:87 秒
- 2 个过程:85 秒
- 3 道工序 88 秒
知道什么可能导致缓慢吗?
我正在运行的机器有 6 个内核和足够的内存以避免任何交换。IBM ILOG Cplex 库是 12.5 版。