マルチスレッドアプリでは、マルチコアまたはマルチプロセッサの配置が優れていますか?
-
03-10-2019 - |
質問
私はこのトピックについてすでにここで多くを読みました(例:stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multiprocessor-how-are-are-are-are マルチCPU、マルチコア、ハイパースレッド)およびその他の場所(例:ixbtlabs.com/articles2/cpu/rmmt-l2-cache.htmlまたはsoftware.intel.com/en-us/articles/multi-core-introduction/)ですが、まだわかりません。非常に簡単に思えるものをカップルします。だから私はただ尋ねたと思った。
(1)各コアにマルチプロセッサシステムと同じように効果的に専用のキャッシュを備えたマルチコアプロセッサ(もちろん、プロセッサの速度、キャッシュサイズなどのバランスが取れています)ですか?
(2)分析する画像(つまり、コンピュータービジョン)がいくつかあるとしましょう。これらの画像はRAMにロードされています。私のアプリは、分析する必要がある各画像のスレッドを生成します。共有キャッシュマルチコアプロセッサのこのアプリは、専用のキャッシュマルチコアプロセッサよりも遅くなり、後者は同等のシングルコアマルチプロセッサマシンと同じ速度で実行されますか?
お手伝いありがとう!
解決
キャッシュのサイズが重要です。これのために、私はx86プロセッサを想定しており、デュアルコアプロセッサで共有されているL2キャッシュのみを使用しています。
2つのシングルコアプロセッサを1つのデュアルコアプロセッサとシングルコアプロセッサの両方を比較している場合、どちらも同じ量のデータキャッシュ(同じ速度で実行されています)を持っている場合、より多くのキャッシュがあるため、画像の一部がキャッシュに収まることができます。 、そして、画像データの処理がこのデータに繰り返しロードおよび/または繰り返し保存する必要がある場合、これが同じクロック速度でより迅速に進む可能性が非常に高いです。
2つのシングルコアプロセッサを、データキャッシュが各単一コアプロセッサのデータキャッシュの2倍のサイズである1つのデュアルコアプロセッサと比較している場合、データキャッシュの約半分が各プロセッサの作業に使用されます。画像データに加えて、各独立したスレッドが使用しなければならないことが、共有データがあることをやめる可能性があります。この共有データが共有データキャッシュに保存されている場合、2xSingleコアセットアップよりも2つのコア間でより簡単に共有できます。共有データのチャンクごとに2xSingleコアセットアップでは、キャッシュの1つが保存され、他のプロセッサがそのデータを使用する必要がある場合、わずかなオーバーヘッドがあります。
また、デュアルコアマシンは、スレッドの新しいプロセッサのキャッシュを入力する必要がなく、もう1つのキャッシュが必要でないデータがあるため、同じプロセッサモジュールでスレッドが1つのコアから別のコアに移行しやすくなります。スペース。
私はあなたが最終的にあなたが一般的に使用するためにいつでもコアあたり3〜10にスレッドの数を制限することを実験することを提案することをお勧めします。スレッドはすべてそのキャッシュスペースのために互いに競合するので、あまりにも多くのスレッドからのすべてのデータが押し出される前に押し出されるようになります。また、各スレッドがいくつかの画像ファイルにループできる場合、各スレッドのスタックスペースがスタックが少ないためキャッシュにとどまるように促すことで、少し得ることができます。また、OSがスレッドに追いつくために使用しなければならないメモリの量を減らします。
あなたが最大の勝利は、ディスク、ネットワーク、または人間の相互作用など、ゆっくりとアクセスして処理を重複できる場合です。したがって、CPUを忙しく保つのに十分なスレッドが必要なものです。