介绍:
我目前正在开发一款软件,我在其中使用多线程程序对顺序程序进行基准测试。我的硬件有 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 一起使用?
提前致谢!