相同的程序在一个据称更好的机器上要慢得多

时间:2016-01-24 02:44:11

标签: throughput

当在两台不同的机器上运行相同的应用程序时,我发现一个应用程序速度要慢得多,但它应该是两者中速度更快的应用程序。这是一个带有线程池的计算绑定应用程序。线程不相互通信也不外部通信。应用程序在开始时从磁盘读取(几分之一秒)并在结束时写入磁盘(几分之一秒)。

该程序在确定性变化的输入集上重复运行模拟。由于输入相同,因此可以比较输出,它们实际上是相同的。唯一的区别是经过的时间。我记得有一个对象是"共享"从某种意义上说,所有线程都从它读取,但我的回忆是严格只读。线程工作是同质的。

Dual machine:2核/ 4线程机,2.53 GHz,3MB缓存,8GB RAM,passmark.com基准约为2100,我的应用程序的线程池大小设置为4,JVM内存高水标记为2.8 GB,经过时间为47分钟

Quad machine:4核/ 8线程机,2.2 GHz到3.1 GHz,6MB缓存,8GB RAM,passmark.com基准大约6000,我的应用程序的线程池大小设置为8,JVM记忆高水位标记为2.8GB,经过时间164分钟

另一个比较:

Dual machine:线程池大小设置为2,经过时间98分钟*可能更少。请参阅脚注。

Quad machine:线程池大小设置为2,经过时间为167分钟

*因为我还在播放音频文件,所以可能不到98分钟。这意味着异常比这个结果更糟糕。

jvisualvm个人资料看起来很相似,但由于看起来很奇怪的故障,我从中得不到多少用处。我正在寻找关于在哪里寻找的建议。

这两台机器都是Ubuntu 14.04.3和Java 8。

1 个答案:

答案 0 :(得分:0)

答案是:收集更多数据并得出一些结论。似乎在比较这两个系统时可以得出一些结论,但它们可能不会扩展到芯片组或处理器。

回顾原始发布中的数据和以下测量结果,似乎对于小型数据集,四核系统的超线程不仅不会显着提高吞吐量,而且甚至超过4核设备上的2个线程也不会提高吞吐量每单位时间,至少与这些特定的同质工作量有关。对于大型数据集,似乎超线程降低了每单位时间的吞吐量。注意2933秒的结果与平均1883秒(平均值2032和1734)相比。

双核超线程非常好,在线程池大小维度上可以很好地扩展。双核在数据集大小维度上也可以很好地扩展。

data table

所有测量都是经过的时间。可以推断出其他方法,例如可以对2032和1734进行平均。