2

我在 Windows 上使用 OpenMP 和 MinGW。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。

编辑:在确认相同的代码与 CLang 正常工作并查看 libgomp 的源代码后,我发现它与 libgomp 的实现有关。他们使用旧方法来计算 Windows 上的处理器(迭代 GetProcessAffinityMask 的输出,仅当系统上的逻辑核心少于 64 个时才有效)

4

0 回答 0