2017-08-19 55 views
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 

をそれでも、私は同じエラーを取得しています。

どのような考えですか?

編集:上記の実験を行う前に、コードが任意の数のスレッドで正常に動作していました。

+0

コアあたり1スレッドを実行しようとしている場合、スレッドの配置はアドバイザリにすぎないと思われます。ターゲットがlibgompがアフィニティをサポートするものであれば、GOMP_CPU_AFFINITYマスクを設定する方が簡単です。そうでない場合は、論理CPU割り当てのスレッドを受け入れる準備ができている必要があります。 – tim18

+0

私はそれが親和性に関するものではないと信じています。これは、1つ以上のスレッドではまったく実行できません。おそらく、CPU0とは別のCPUを見ることができませんでした(これはまったく無効にできません)。 CPUを無効/有効にしてOpenMP環境変数に影響を及ぼしたり消去したりするかどうかはわかりません。いずれの記事も見つかりませんでした。 – MrA

答えて

0

CPUを再度有効にした後でも、OMPスレッドの数は半分になりました(奇数を無効にしたため)。

解決方法: 最後にサーバーを再起動する必要がありました。この後、すべて正常に動作します。