0

介绍:

我目前正在开发一款软件,我在其中使用多线程程序对顺序程序进行基准测试。我的硬件有 24 个可用内核和 16GB 的 RAM。我的程序是用 Java 编写的,但由于需要绘图而从 MATLAB 执行。打开 MATLAB 后会显示以下消息:

Picked up JAVA_TOOL:OPTIONS: -XX:parallelGCThreads = 8 - Xmx8g -Dsun.java2d.pmoffscreen = false

理论

现在根据阿姆达尔定律,maksimum 性能提升将被定义为 1/(B-(1-B)/P),其中 B 是顺序分数,P 是处理器数量。在我的情况下,我有 B = 0.01, (1-B = .99) 和 P = 24 这给了我大约 20 的理论最大性能提升。

现在,据我了解parallelGCThreads,这是可用的垃圾收集器线程的最大数量。在对我的程序进行了一些密集测试之后,我能够实现的最大比率增加似乎是 7.5 倍,这与理论值 20 相差甚远。但是,如果我替换 P = 8,我得到的理论限制为7.8 与我的程序中获得的非常接近。

问题

实际上是否parallelGCThreads限制了线程的数量,使得阿姆达尔定律应该与 P = 8 而不是 P = 24 一起使用?

提前致谢!

4

1 回答 1

2

parallelGCThreads 是否实际上限制了线程的数量,使得阿姆达尔定律应该与 P = 8 而不是 P = 24 一起使用?

不会。在执行“实际”工作时,GC 线程的数量不会直接影响程序的性能。(如果程序产生大量垃圾可能会影响它,但分析会相当复杂......而且它肯定不会P在 Amdahl 方程中取代。)

您可以尝试调整parallelGCThreads 参数以查看它有什么效果,但可能还有其他因素(不是GC)会影响您的多线程性能,从而导致加速比低于您的预期。很可能与应用程序有关;例如内存带宽争用或Java 锁争用。

FWIW - 多线程程序接近阿姆达尔定律设定的理论极限是不寻常的。

于 2014-02-17T17:23:27.190 回答