2016-12-12 4 views
1

私はインテルXeon E5-2620に24個のCPUを搭載しています。私はopensslを使ってAESの解読のために24のスレッドを作成するアプリケーションを書いています。 1万回のデータ復号化でスレッド数を1から24に増やすと、次のような結果が得られます。 enter image description here24コアCPUでスレッド数を4以上に増やすことでパフォーマンスが低下

問題は、問題がコアの使用ではないか、ということを示しているラムの少なくとも半分は無料で、常に私は、スレッド数を増加させたときに私が決定したコアの全てが100%になっているし、ため、システムの32ギガバイトのRAMラム限界。 OSレベルでパフォーマンスを向上させるための特別なパラメータを設定しなければならないか、最大限のパフォーマンスで4スレッド以上に達することができないプロセス制限であることが分かります。 私は "openssl evp ..."を実行すると、プロセスフォークのためにaes暗号化復号化をテストすると、コアパフォーマンスの約20倍以上のパフォーマンスが向上することに言及する必要があります。 誰もが考えていますか?

+1

一つの問題は、「コア」の半分である*実際の*コアではなく、いくつかのパイプラインのトリックをエミュレートする仮想コアの種類、: 次のコマンドを使用して第七コアを無効にすることができます。だから、あなたが12スレッド以上になると、(小さな)バンプがあるのです。 –

+0

'openssl evp'はシングルスレッドですか? – malat

+1

考えられる説明がたくさんありますが、ベンチマークcosde * ...(ヒント)を表示していない場合は*推測できます。 –

答えて

1

私はようやくその理由を発見しました。複数のCPUは、異なる距離を有するサーバ上に異なるラムを有する。 1つのCPUで4つのスレッドが作成されるまでスレッドを作成したが、5番目のスレッドは2番目のCPUに配置され、OSでNUMAを使用しないためパフォーマンスが低下する。 したがって、2番目のCPUのコアを無効にすると、6スレッドのパフォーマンスが予想通りに向上しました。

cd /sys/devices/system/cpu/ 
echo 0 > cpu6/online 
+0

ここでは[インテル®Xeon®プロセッサーE5-2620](http://ark.intel.com/products/64594/Intel-Xeon-Processor-E5-2620-15M-Cache-2_00-GHz-7_20-GTs-Intel -QPI)、「Max#of Memory Channels = 4」と表示されます。また、4コア後のグラフ時間の増加から。これらは関連していますか?私は、コアが専用のメモリチャネルを持っている可能性があり、スレッドが作成されたときにコアがコアごとに独自のメモリチャネルを持つように均等に分散されていると思います。したがって、5thスレッド以降、メモリ競合が開始されます。 4つのスレッドしか作成されていない場合、個々のスレッドのコア/ cpu-idを表示できますか? – sameerkn

0

マルチプロセッシングで20倍のスピードアップが得られ、それに相当するマルチスレッド化が2.5倍にすぎない場合は、明らかにマルチスレッド化コードにボトルネックがあります。さらに、このボトルネックはハードウェアアーキテクチャとは無関係です。

これは、コード内のものでも、下にあるライブラリでもかまいません。両方を勉強することなく伝えるのは本当に不可能です。

まず、マルチスレッドアプリケーションでロック競合を調べてみましょう。

関連する問題