2014-02-17 27 views
0

簡介:-XX:parallelGCThreads = 8是否涉及與Amdahl定律相關的核心數量?

我目前工作的一個軟件,我用基準多線程一個順序程序。我的硬件有24核心和16GB的RAM。我的程序是用Java編寫的,但是由於需要繪圖而從MATLAB執行。在MATLAB的開口將顯示以下信息:

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

理論

現在按照Amdahl's Law的maksimum性能的提高將被定義爲1 /(B-(1-B)/ P) ,其中B是連續分數,P是處理器的數量。 在我來說,我有B = 0.01,(1-B = 0.99)和P = 24 這給我的身邊20.

一個理論上的最大性能提升現在,我的理解parallelGCThreads它是最大可用的垃圾收集器線程數。在對我的程序進行了一些深入測試之後,似乎我已經能夠實現的最大比率增加是7.5倍,這不是理論上接近20的地方。然而,如果我替換P = 8,我得到的理論極限爲7.8這與我的程序中獲得的非常接近。

問題

是否parallelGCThreads實際限制,使得Amdahl定律應與P = 8,而不是P = 24使用的線程數量?

在此先感謝!

回答

1

parallelGCThreads是否實際限制了線程的數量,使得Amdahl定律應該與P = 8而不是P = 24一起使用?

不是。GC線程的數量並不直接影響程序在執行「真正」工作時的性能。 (如果程序產生大量垃圾,它可能會影響它,但分析將會非常複雜......並且它肯定不會取代Amdahl方程中的P)。

您可以嘗試調整parallelGCThreads參數以查看內容它可能會產生影響,但可能還有其他影響您的多線程性能的其他因素(不是GC),導致加速比低於您的預期。這很可能與應用程序有關;例如內存帶寬爭用或Java鎖爭用。

FWIW - 多線程程序接近Amdahl定律設定的理論極限是不常見的。

+0

謝謝你的回答,我非常讚賞它。你幾乎可以回答與此事有關的任何事情。我對這個問題沒有多大的瞭解,但是當Amdahls比率在19.5左右時,速度比爲7.5時是正常的嗎? 你會說什麼是通常的'嫌疑犯'放慢我的程序?你會做什麼來識別它們? – SteewDK