- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 CPUID,但有一些附加条件。根据sandpile.org's CPUID page ,CPUID 标准功能 0000_0004h 及以上仅在 MISC_ENABLE.LCMV 标志设置为 0 时才起作用。该标志是型号特定寄存器 (MSR) 1A0 的位 22。显然,这个限制是由于 Windows NT 中的一个错误造成的(感谢 Microsoft 让事情变得更容易;))。
我可以测试 CPUID 0000_0001h(ecx 标志,位 3)的 LCMV 标志是否存在。假设它存在,它到底有什么用,为什么它对 CPUID 产生如此大的影响? MSR 1A0 是读/写寄存器还是只读寄存器?这样一个特殊用途的寄存器如何使用汇编代码读取/写入?
如果寄存器在技术上是读/写的,那么在将其恢复到原始设置之前,在 CPUID 指令的持续时间内将位 22 重置为 0 是否安全?或者如果它设置不正确(即启用),我就完蛋了?
最后,sandpile使用这样的措辞:“仅当 MISC_ENABLE.LCMV 设置为 0 时才启用此级别。这是由于 Windows NT 错误造成的。”如果由于这个原因专门禁用了一堆标准级别,这是否会反射(reflect)在 CPUID 级别 0000_000h 的 eax 寄存器(最大支持的标准级别)的输出中?
唷...我想就是这样了。
最佳答案
您需要下载Intel® 64 and IA-32 Architectures Software Developer’s Manuals因为它包含所有请求的信息。
I can test for the presence of the LCMV flag with CPUID 0000_0001h (ecx flags, bit 3). Assuming it is present though, what exactly is it for, and why does it have such an effect on CPUID?
该标志的全名(参见 Vol. 3B B-17 )是“Limit CPUID MaxVal”,其效果为“当该位设置为 1 时,CPUID.00H 返回 EAX[7:0] 中的最大值3”。
Is MSR 1A0 a read/write register or read-only?
根据英特尔手册进行读/写(有一个警告,请继续阅读)。
How is such a special-purpose register even read from/written to using assembly code?
您使用 RDMSR
(Vol. 2B 4-301) 阅读并使用 WRMSR
(Vol. 2B 4-505) 编写,但请注意,它们要求您运行在实模式或特权级别 0(也称为内核模式)下。
If the register is technically read/write, is it safe to reset bit 22 to 0 for the duration of the CPUID instruction, before restoring it to its original setting? Or am I pretty much screwed if it's set incorrectly (i.e. enabled)?
它实际上应该只在有缺陷的操作系统上设置,并且您不应该清除它。如果您正在编写自己的内核,请务必继续并清除它,正如您自己所说,它仅适用于有缺陷的 NT 版本和类似情况。
Finally, sandpile uses the wording,"This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug." If a bunch of standard levels are specifically disabled for this reason, will that be reflected in the output of CPUID level 0000_000h's eax register (maximum supported standard level)?
是的,它是专门设计来强制它在这种情况下返回 3(参见上面的描述)。
关于assembly - CPUID:为什么某些功能必须将 MISC_ENABLE.LCMV 设置为 0?可以暂时覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239689/
这是要修改的正确 Linux 内核代码吗?我如何进行更改以模拟 CPUID 代码以及我需要更改哪个函数。谢谢 #include #include #include #include #incl
我的CPU是Intel Core2Quad Q9300 2.5GHz。 CPU-Z 给我的值是 Family:6、Model:7 和 Stepping:7。尝试使用 EAX=1 的 cpuid 指令编
我在 Intel Vol.2 的多个指令条目中找到了推测数据缓存过程的描述。 例如,lfence : Processors are free to fetch and cache data specu
考虑到我正在使用 C++ 进行编码,如果可能的话,我想使用类似 Intrinsics 的解决方案来阅读有关硬件的有用信息,我的担忧/考虑是: 我对汇编不太了解,仅获取此类信息将是一笔可观的投资(虽然它
这里先给大家分享一个分配静态ip地址的代码 ? 1
cpuid用作序列化指令以在基准测试时防止 ooo 执行,因为基准测试指令的执行可能会在 rdtsc 之前重新排序如果单独使用。我的问题是以下说明是否仍然可行 rdtsc将在 cpuid 之间重新排序
有时我遇到用rdtsc指令读取TSC的代码,但是恰好在之前调用cpuid。 为什么需要调用cpuid?我意识到这可能与具有TSC值的不同内核有关,但是当您依次调用这两个指令时会发生什么呢? 最佳答案
我已经看到相关问题包括here和 here ,但似乎唯一提到的用于序列化 rdtsc 的指令是 cpuid。 不幸的是,cpuid 在我的系统上大约需要 1000 个周期,所以我想知道是否有人知道更便
我正在寻找一种巧妙的方法来捕获和摆弄 Linux 进程的 CPUID 指令。尝试使用 ptrace() 并修补进程创建的所有可执行 mmap 区域中的所有 cpuid 操作码,并用 int3 替换它们
CPUID 可用作序列化指令,如 here 所述和 here .在 C++ 中以这种方式使用它的最小/最简单的 asm 语法是什么? // Is that enough? // What to do
我正在尝试使用 C++ 中的 CPUID 访问信息。到目前为止,我已经制作了这段代码,不能再继续了。我在这里和网上找到了一些有用的文章,但它们似乎对我没有帮助。 我应该只使用 x88 的指令和寄存器。
我正在使用 CPUID 指令在我的操作系统中打印一些关于 CPU 的信息。 读取和打印供应商字符串(GenuineIntel)效果很好,但读取品牌字符串给我一些奇怪的字符串。 ok cpu-info
我正在尝试开发一个 C 函数来获取一些主板信息(名称、ID 等),但我找不到这些信息的存储位置。我查看了 CPUID,但在那里找不到与主板相关的任何信息(尽管有很多关于 CPU 的信息)。 有谁知道我
我正在为我的爱好操作系统开发 CPU 检测和一般环境检测代码。是否存在需要多次调用 CPUID 的情况?也就是说如果系统有多个核心,操作系统是否需要在每个核心上调用CPUID? NUMA 也是如此。
我正在尝试分析 x86-64 处理器上的代码执行时间。我指的是this英特尔白皮书并浏览了其他 SO 线程,讨论使用 RDTSCP 与 CPUID+RDTSC 的主题 here和 here . 在上述
我在较新的基于 i7 的计算机上遇到基于 CPUID 的代码的问题。它检测到 CPU 为具有 8 个 HT 单元的单核,而不是每个具有 2 个 HT 单元的 4 个核。 我一定是误解了从 CPU 返回
我正在尝试编译 C++ 代码。但我在 power8 架构上遇到错误。在 x86_64 架构中运行良好。以下是我遇到的错误。 error: impossible register constrain
如何以编程方式获取运行给定线程的核心?类似于 Unix 的 getcpuid。这适用于 Linux 和 C。 最佳答案 是否sched_getcpu()没有给你不同的核心值(value)? 关于c -
在为 Windows 编写新代码时,我偶然发现了来自 Windows API 的 _cpuinfo()。因为我主要处理 Linux 环境 (GCC),所以我想访问 CPUInfo。 我尝试了以下方法:
我正在做一些 Linux 内核计时,特别是在中断处理路径中。我一直在使用 RDTSC 进行计时,但我最近了解到它不一定准确,因为指令可能会乱序发生。 然后我尝试了: RDTSC + CPUID(此处为
我是一名优秀的程序员,十分优秀!