Я использую OpenMP с MinGW в Windows.GCC версия 7.2.0 x86-64-posix-sev-rev1, построена по проекту MinGW-W64.На компьютере с 2 x Xeon E5-2699 V4 под управлением Windows Server 2016. Я использую:
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 вообще не видит ни одного из процессоров.
РЕДАКТИРОВАТЬ: После подтверждения того, что тот же код работает правильно с CLang, и изучения источника libgomp я обнаружил, что он связан с реализацией libgomp.Они используют старый способ подсчета процессоров в Windows (перебирая вывод GetProcessAffinityMask, который работает, только если в системе менее 64 логических ядер)