2016-12-28 22 views
0

OpenMPで定義されているコアの数はどのくらいですか?このAPIはコアの存在をどのように知っていますか?OpenMPはどのようにしてシステムのコア数を決定しますか?

+0

@zulanチェックしましたが、nthreads-varのデフォルト値は1ですが、コアの数は通常1より大きいと言われています。つまり、noとの関係はありません。コアの? –

+0

それはどこにありますか? OpenMP標準4.5では、2.3.2ではデフォルトが*実装定義*となっています。 – Zulan

答えて

3

OpenMPは、基本的に並列領域のスレッド数を制御する内部制御変数(ICV)nthreads-varを定義しています。

初期値nthreads-var(環境変数OMP_NUM_THREADSで定義されていない場合)は、実装定義です。コアの数は合理的なデフォルトのように見えるかもしれません。 GCC(libgomp)はBSD、Linux、mingw32、POSIX、rtemsをgomp_init_num_threadsに実装しています。具体的な実装はlibgomp/config/<platform>/proc.cで確認できます。

Linuxはスレッドアフィニティーをpthread_getaffinity_npでチェックし、スレッドの数をプロセスの実行が許可されているCPU数に設定します。同様にGetProcessAffinityMaskを介してMinGW。残りのプラットフォームは基本的にsysconf(_SC_NPROCESSORS_ONLN)を使用します。

+1

OpenMPはOpenMP 4.0+のスレッド配置APIにコアの概念を持っています。 Linux上のGCCとIntel OpenMPの両方のランタイムは、トポロジー情報を見つけるために 'sysfs'のCPUエントリを解析します。 –

+0

@HristoIliev良い点。 OPには、私が取り組もうとしていたOpenMPスレッドに関するいくつかの基本的な誤解があると私は思う。より技術的に正しい答えを編集しました。 – Zulan

関連する問題