0
私のマシンの論理コアの数は8です。スレッドの数をたとえば16 omp_set_num_threads(16);
に増やすとどのような欠点がありますか?スレッドの数を増やすときの短所は何ですか
私のマシンの論理コアの数は8です。スレッドの数をたとえば16 omp_set_num_threads(16);
に増やすとどのような欠点がありますか?スレッドの数を増やすときの短所は何ですか
キャッシュの無効化は大きなものです。各コアが2つのスレッドで動作すると仮定しましょう。あるスレッドが別のスレッドにスワップアウトされると、すべてのキャッシュエントリが無効化され、したがって、新しいスレッドのために上位レベルのキャッシュまたはメインメモリからデータをロードする必要があります。それは処理を遅くするでしょう。スレッド数を8にしても、それが起こらないという保証はありませんが、マルチプロセス環境では、新しいプロセスがコアに移動するたびにこれが起こります。
また、OpenMPランタイム(少なくともLLVM 1とインテルコンパイラで使用されるもの(実際には同じ:-)])は、オーバーサブスクリプションがないときにうまく動作するデフォルト設定を持っているとします。特に、オーバーサブスクリプションがない場合にパフォーマンスを向上させるため、カーネルにすぐに入るのではなく、ワーカースレッドをさまざまな場所で(たとえばバリアに入るときなど)しばらく回転させたままにします。しかし、一度あなたは過剰購読しているそれは悪いです!したがって、これらのコンパイラでこれを行う場合は、KMP_BLOCKTIME = 0に設定する必要があります。 –