2016-08-23 2 views
0

プログラムを1つのスレッドでしか実行しません。当然ながら、このプログラムはOpenMPライブラリを使ってマルチスレッドを実行しますが、デバッグ目的のためにマルチスレッドを無効にしたいのです。 シングルスレッド実行を強制するには?

は、動的に(例えば omp_get_num_threads常に 1を返します)OMPの呼び出しに合理的な行動を与えるが、複数のスレッドを開始しないダミーのOpenMPライブラリのみにリンクする gdbまたは多分 ld.soレベルの上のオプションがあります?

+0

OpenMPの実装には、Intelのようにシリアルスタブを含むOpenMPライブラリが含まれている場合があります。実装に依存しない回答が必要な場合は、環境変数と関数呼び出しを使用してください。 – tim18

答えて

3

実行時にOMP_NUM_THREADS = 1を設定するのはどうですか?適切な尺度のためにOMP_THREAD_LIMIT = 1に設定することもできます。

+0

はい、そういう環境変数があります。 –

+1

しかし、 "私のマシンに4つのコアがある"という理由で、 "omp_set_num_threads(4)"(またはそれに類似したもの)のハードワイヤリングで羨ましいものを効果的に無視する多くのコードがあることに注意してください。あなたはこれがひどいアイデアだと私は思うかもしれないが、残念なことに、それは一般的なままです。 –

+0

これはOMP_NUM_THREADSに加えてOMP_THREAD_LIMIT = 1を提案した理由です。ハードワイヤードのケースでさえも1まで減らす必要があると思います。 – jefflarkin

関連する問題