【发布时间】:2012-03-05 01:13:07
【问题描述】:
我正在尝试使用__cpuid() 收集有关我的 CPU 的信息。虽然它在我的计算机上运行良好,但当我在同事的计算机上运行我的程序时,它检测到 Intel Core2 Quad Q6600 是超线程的,尽管根据英特尔自己网站上的规范它不是。
__cpuid() 也检测到错误数量的“逻辑核心”,如下所示:
Programmatically detect number of physical processors/cores or if hyper-threading is active on Windows, Mac and Linux。它声称Intel Xeon E5520 有 16 个逻辑核心和 8 个物理核心。
我尝试在我自己的计算机上运行该线程中的代码,Intel i7 2600K 给了我与 Xeon 相同的数字。
那么__cpuid() 真的可靠吗?根据我自己的经验,它似乎并不那么可靠。我有什么非常根本的错误吗?
【问题讨论】:
-
如果你不打算使用 __cpuid()。您可以使用 OpenMPs omp_get_num_procs() 它应该返回您的 CPU 可以同时运行的线程数量。我不知道这些信息有多可靠。这种方式我从来没有遇到过任何问题。
-
CPUID 通常相当可靠,但有时它可能会产生误导或不正确。您的 CPU 可能很好地支持一项功能,但您的主板不支持(或已禁用),因此它会被报告为存在,但无法正常工作。有一些库采用 CPUID 并尝试使其更可靠,并带有更正数据库等。
-
但是如果 CPU 不支持超线程和 CPUID 给你它存在的信息是主板的真正问题,我可以看到它是相反的,CPU 支持HTT 但不是主板,因此在检查 HTT 时会出现错误。