介绍:
我目前正在开发一款软件,在其中我对具有多线程程序的顺序程序进行基准测试。我的硬件有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-多线程程序接近阿姆达尔定律设定的理论极限是不寻常的。