c++ - C/C++/Assembly 以编程方式检测超线程在 Windows、Mac 和 Linux 上是否处于事件状态

标签 c++ c assembly hyperthreading

<分区>

我已经可以在所有这三个平台上正确检测到逻辑处理器的数量。

为了能够正确检测物理处理器/内核的数量,我必须检测超线程是否受支持且处于事件状态(如果您愿意,也可以启用),如果是,则将逻辑处理器的数量除以 2 以确定数量物理处理器。

也许我应该举个例子:

启用超线程的四核 Intel CPU 有 4 个物理内核和 8 个逻辑处理器(超线程创建了 4 个以上的逻辑处理器)。所以我当前的函数会检测到 8 个而不是所需的 4 个。

因此,我的问题是是否有一种方法可以检测是否支持和启用超线程?

最佳答案

在 Windows 2003 Server 和 Windows XP SP3 及更高版本上,您可以使用 GetLogicalProcessorInformation 确定此信息系统调用。

关于c++ - C/C++/Assembly 以编程方式检测超线程在 Windows、Mac 和 Linux 上是否处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904283/

相关文章:

c++ - cppcheck 如何抑制内联不匹配抑制?

具有最小样板的 C++ 类 "upgrade"

c - 使用(void **)传递(double ***)指针可以吗?

c - 将用户输入从 C 传递给汇编器

assembly - 为什么编译器在子程序之间插入 INT3 指令?

c++ - 通过 C++ 控制应用程序的监视器

c++ - friend 类概念如何不需要前向声明(forward declaration)?

c - 使用枚举类型时,评分系统无法正确累加

c - 有没有一种算法可以在线性时间内计算数组反转?

linux - 使用 pop ecx 在屏幕上进行 assembly 打印