c++ - 如何验证您的处理器是否支持超线程?
问题描述
这是我在 StackOverflow 上的第一篇文章,所以如果我违反了一些规则,我深表歉意。
我的教授(不是一个好教授)刚刚告诉我们,我们有 24 小时的时间编写一个 10 行代码的程序,以验证您的处理器架构是否支持超线程操作。
至少可以说,我不知道他想要什么,甚至不知道如何开始。我相信他想要用 C++ 编写它,但是当我问这个问题并且没有告诉我用什么语言来做它时,他很不高兴。
当我告诉他我不明白他在问什么时,他非常沮丧,并告诉我我一定没有注意。老实说,我一直在做笔记,甚至一直在做笔记。我想这门操作系统课程并没有让我沉迷。
我通过阅读英特尔手册尝试了自己的研究,但没有运气(也是 5000 多页)。我到处搜索以了解超线程的基础知识,您可以同时运行 2 个进程(如果正确),但不知道如何将其转换为代码。
任何帮助都会很棒!
解决方案
如何验证您的处理器是否支持超线程?... 在 C++ 中
在 C++ 中没有标准的方法可以做到这一点。
如果您知道程序将在哪个 CPU 上运行,那么您可能会在 CPU 的文档中找到一种方法。例如,486 和更高版本的 x86 处理器具有该CPUID
指令。您需要的相关信息是“每个物理处理器包的逻辑处理器数 (CPUID.1.EBX[23:16])”。如果此值大于 1,则启用超线程或类似功能。
要执行诸如 之类的指令CPUID
,您需要用汇编语言而不是 C++ 编写。也就是说,如果您在操作系统中,那么它可能会提供一个很好的 API 来访问此功能(请参阅注释以获取示例)。
如果您的目标系统支持,那么一种不太特定于 CPU 的方法是读取SMBIOS 。在这里,您可以将处理器线程数除以内核数以获得与上述相同的值。例如,您可以查看dmidecode
程序在 Linux 上的实现,以了解如何阅读。
推荐阅读
- postgresql - Postgres 权限问题
- node.js - 如何将自定义 AWS 开发工具包与 nodejs 一起使用?
- java - JDK 8 中的 JAXB 问题
- json - 将存储过程结果传递给 Laravel API 资源
- java - 使用 Twilio Notify API 发送批量 SMS 时,如何将 status webhook 回调绑定到原始消息?
- c - 为什么我的指针没有增加到下一个索引?
- angular - 如何将模型名称属性与反应形式属性映射 - Angular 6
- python - 查找具有相同 sha1 哈希第一位的单词
- javascript - 图像处理/JavaScript
- javascript - 仅当数据是新的(不同于现有的)时才更新 Vuex