0

はじめに:

私は現在、マルチスレッドプログラムを使用してシーケンシャルプログラムをベンチマークするソフトウェアに取り組んでいます。私のハードウェアには 24 個のコアがあり、RAM は 16GB あります。私のプログラムは Java で書かれていますが、プロットが必要なため MATLAB から実行されます。MATLAB を開くと、次のメッセージが表示されます。

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

仮説

ここで、アムダールの法則に従って、最大のパフォーマンス向上は 1/(B-(1-B)/P) として定義されます。ここで、B は順次部分、P はプロセッサの数です。私の場合、B = 0.01、(1-B = .99)、P = 24 です。これにより、理論上の最大パフォーマンスが約 20 向上します。

今、私が理解parallelGCThreadsしているように、これは利用可能なガベージ コレクター スレッドの最大数です。私のプログラムで集中的なテストを行った後、私が達成できた比率の最大増加は 7.5 倍であり、理論上の 20 にはほど遠いようです。ただし、P = 8 に置き換えると、理論上の限界は次のようになります。これは、私のプログラムで取得したものに非常に近いものです。

質問

parallelGCThreadsアムダールの法則が P = 24 ではなく P = 8 で使用されるように、実際にスレッドの量を制限しますか?

前もって感謝します!

4

1 に答える 1

2

parallelGCThreads は、アムダールの法則を P = 24 ではなく P = 8 で使用するように実際にスレッドの量を制限していますか?

いいえ。「実際の」作業を行っている間、GC スレッドの数がプログラムのパフォーマンスに直接影響することはありません。(プログラムが大量のガベージを生成した場合、影響を受ける可能性がありますが、分析はかなり複雑になります...そしてP、アムダールの方程式では確実に置き換えられません。)

parallelGCThreads パラメーターを微調整して、その効果を確認することもできますが、マルチスレッドのパフォーマンスに影響を与えている何か (GC ではない) がおそらくあり、その結果、予想よりも低いスピードアップ率になっています。ほとんどの場合、それはアプリケーションに関係しています。たとえば、メモリ帯域幅の競合、Java ロックの競合などです。

FWIW - マルチスレッド プログラムが、アムダールの法則によって設定された理論上の限界に近づくことはまれです。

于 2014-02-17T17:23:27.190 に答える