私はOpenMPプログラムを書いて、2つのコアマシンで実行しました。Openmpスレッドアフィニティ:プログラム内に2つのスレッドを設定し、実行中のコア数はいくつですか?
スレッド番号を1から2に、2から4に変更したとき、2倍のスピードを得ることができませんでした。
2つのスレッドを4つのスレッドにすると、ハイパースレッドになります。 Hyperthreadsは一般的にリソースの制限のために2倍のスピードを上げることはできません。
しかし、1スレッドから2スレッドまで、2倍のスピードを得ることはできません。私はこれについて混乱しています。私はCPUアフィニティコンセプトを検索して見つけましたが、OpenMPの仕組みを理解できません。
2つのスレッドを使用すると、Openmp静的スケジュールは2つのスレッドを1つのコアまたは2つのコアに配置しますか?戻り値が0または1であることから
OMP_GET_THREAD_NUM()関数は、私に答えを言うことはできませんが、私は、彼らは1つのコアまたはヘルプ2.
おかげで実行されているかわかりません。
マスター私は、これはあなたが動作するように適切なオプションを選択に役立つことを願っています
:
コードなしでは、私たちは何が起こっているのかほとんど推測できないので、答えにくいです。まず、omp_get_thread_num()はスレッド識別子を返します。スレッド1は0を返し、スレッド2はスレッド1を返します。 – Taron
ハイパースレッディングにもかかわらず2つのスレッドを別々のコアに割り当てる通常の方法は、omp_places = coresです。あなたのopenmpがこれをサポートしていない場合は、すべてのコアをフルに活用するために、コアより多くのスレッドが必要な場合があります。 – tim18
スレッド2が実行されているコアは、どのコアが実行中であるのかを調べるためのコードを書くことができますか? –