介绍:

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

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


理论

现在,根据Amdahl's Law,最先进的性能提升将被定义为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是否实际上限制了线程数量,以使Amdahl定律应用于P = 8而不是P = 24?

提前致谢!

最佳答案

parallelGCThreads是否实际上限制了线程的数量,以致应将Amdahl定律用于P = 8而不是P = 24?


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

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

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

09-26 20:20