0
14個のコアとハイパースレッディングが有効な2ソケットマシンがあり、合計14 * 2 * 2 = 56個の処理ユニットまたは論理CPU。libgomp:スレッドの作成に失敗しました:CPUを無効/有効にした後に無効な引数
私が行うことで、すべての奇数のCPU(1、3、5、7、...、53、55)を無効:
for i in {1..55..2}; do echo 0 > /sys/devices/system/cpu/cpu$i/online; done
/sys/devices/system/cpu/online shows 0 2 4 6 ... 52 54
を今、いつでも私は=(複数のスレッドを作成しようとしています28)私は、次のエラーを取得していますのOpenMPを使用して:
libgomp: Thread creation failed: Invalid argument
私は戻って、それを元に戻すことによって:
for i in {1..55..2}; do echo 1 > /sys/devices/system/cpu/cpu$i/online; done
/sys/devices/system/cpu/online shows 0-55
をそれでも、私は同じエラーを取得しています。
どのような考えですか?
編集:上記の実験を行う前に、コードが任意の数のスレッドで正常に動作していました。
コアあたり1スレッドを実行しようとしている場合、スレッドの配置はアドバイザリにすぎないと思われます。ターゲットがlibgompがアフィニティをサポートするものであれば、GOMP_CPU_AFFINITYマスクを設定する方が簡単です。そうでない場合は、論理CPU割り当てのスレッドを受け入れる準備ができている必要があります。 – tim18
私はそれが親和性に関するものではないと信じています。これは、1つ以上のスレッドではまったく実行できません。おそらく、CPU0とは別のCPUを見ることができませんでした(これはまったく無効にできません)。 CPUを無効/有効にしてOpenMP環境変数に影響を及ぼしたり消去したりするかどうかはわかりません。いずれの記事も見つかりませんでした。 – MrA