首页 > 解决方案 > 如何验证您的处理器是否支持超线程?

问题描述

这是我在 StackOverflow 上的第一篇文章,所以如果我违反了一些规则,我深表歉意。

我的教授(不是一个好教授)刚刚告诉我们,我们有 24 小时的时间编写一个 10 行代码的程序,以验证您的处理器架构是否支持超线程操作。

至少可以说,我不知道他想要什么,甚至不知道如何开始。我相信他想要用 C++ 编写它,但是当我问这个问题并且没有告诉我用什么语言来做它时,他很不高兴。

当我告诉他我不明白他在问什么时,他非常沮丧,并告诉我我一定没有注意。老实说,我一直在做笔记,甚至一直在做笔记。我想这门操作系统课程并没有让我沉迷。

我通过阅读英特尔手册尝试了自己的研究,但没有运气(也是 5000 多页)。我到处搜索以了解超线程的基础知识,您可以同时运行 2 个进程(如果正确),但不知道如何将其转换为代码。

任何帮助都会很棒!

标签: c++intelprocessorhyperthreading

解决方案


如何验证您的处理器是否支持超线程?... 在 C++ 中

在 C++ 中没有标准的方法可以做到这一点。

如果您知道程序将在哪个 CPU 上运行,那么您可能会在 CPU 的文档中找到一种方法。例如,486 和更高版本的 x86 处理器具有该CPUID 指令。您需要的相关信息是“每个物理处理器包的逻辑处理器数 (CPUID.1.EBX[23:16])”。如果此值大于 1,则启用超线程或类似功能。

要执行诸如 之类的指令CPUID,您需要用汇编语言而不是 C++ 编写。也就是说,如果您在操作系统中,那么它可能会提供一个很好的 API 来访问此功能(请参阅注释以获取示例)。

如果您的目标系统支持,那么一种不太特定于 CPU 的方法是读取SMBIOS 。在这里,您可以将处理器线程数除以内核数以获得与上述相同的值。例如,您可以查看dmidecode程序在 Linux 上的实现,以了解如何阅读。


推荐阅读