【发布时间】:2013-06-08 04:14:19
【问题描述】:
我正在使用单线程 CPLEX 和 Java(在 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 版。
【问题讨论】:
-
我看到的速度更快,而不是更慢。 1 个过程在 180 年代解决了 1 个问题。 2 个进程在 225 秒内解决了 2 个问题 = 112.5 秒/问题(更快)。 3 在 280 中解决了 3 = 93.3 秒/问题(更快,几乎是一个过程的两倍)。还是您已经按照您给出的数字进行了除法?
-
你是对的,但是看看进程是如何完全独立的,没有同步问题可言,我原以为两个/三个进程所花费的时间与一个进程大致相同.
标签: java concurrency parallel-processing cplex