OpenMP не видит все процессоры - PullRequest
0 голосов
/ 13 июня 2018

Я использую 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 логических ядер)

...