Windows の MinGW で OpenMP を使用しています。GCC バージョン 7.2.0 x86-64-posix-sev-rev1、MinGW-W64 プロジェクトによってビルドされました。Windows Server 2016 を実行している 2 x Xeon E5-2699 V4 を搭載したコンピューターで、以下を実行しています。
printf("%d ", omp_get_num_procs());
printf("%d ", omp_get_max_threads());
printf("%d ", omp_get_thread_limit());
printf("%d ", omp_get_proc_bind());
これは以下を生成します:
44, 44, 2147483647, 0
ハイパースレッディングを備えた合計 44 個の物理コアがあります。OpenMP は、CPU の 1 つをまったく認識しません。
編集:同じコードがCLangで正しく動作することを確認し、libgompのソースを調べた後、libgompの実装に関連していることを発見しました。Windows でプロセッサをカウントする古い方法を使用します (システム上の論理コアが 64 未満の場合にのみ機能する GetProcessAffinityMask の出力を反復します)。