如何验证处理器是否支持超线程?

问题描述

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

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

至少可以说,我不知道他想要什么,甚至不知道如何开始。我相信他想用C ++编写代码,但是当我问这个问题并且不告诉我用哪种语言编写代码时,他会感到沮丧。

当我告诉他时,我不明白他在问什么,他很难过,并告诉我,我一定不会一直在注意。老实说,我一直在做笔记。我想这门操作系统课程不会让我沉迷。

我通过阅读intel手册尝试了自己的研究,但没有走运(也有5000余页)。我四处搜寻以了解超线程的基础知识,即可以同时运行2个进程(如果正确的话),但不知道如何将其转换为代码。

任何帮助都会很棒!

解决方法

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

在C ++中没有标准的方法来实现这一点。

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...