c++ - CPUID 的内在信息之类的信息?

标签 c++ intrinsics cpuid

考虑到我正在使用 C++ 进行编码,如果可能的话,我想使用类似 Intrinsics 的解决方案来阅读有关硬件的有用信息,我的担忧/考虑是:

  • 我对汇编不太了解,仅获取此类信息将是一笔可观的投资(虽然它看起来像 CPU,但它只是关于翻转值和读取寄存器。)
  • 至少有 2 种流行的 asm 语法(Intel 和 AT&T),所以它是零散的
  • 奇怪的是,如今 Intrinsics 比 asm 代码更受欢迎和受支持
  • 目前我所关注的并非所有编译器都支持内联 asm,MSVC 64 位就是其中之一;恐怕我在深入挖掘我必须使用的不同编译器的功能集时会发现其他类似的缺陷。
  • 考虑到我认为押注 Intrinsics 对我来说更有效率,它也应该比任何 asm 代码更容易。

我要回答的最后一个问题是:如何用内在函数做类似的事情?因为除了 CPUID 操作码之外我没有找到任何其他信息来获取此类信息。

最佳答案

经过一番挖掘I have found gcc 特有的有用的内置函数。

唯一的问题是这种功能真的很有限(基本上你只有2个功能,1个用于CPU“名称”,1个用于寄存器组)

一个例子是

#include <stdio.h>

int main()
{
    if (__builtin_cpu_supports("mmx")) {
        printf("\nI got MMX !\n");
    } else
        printf("\nWhat ? MMX ? What is that ?\n");
    return (0);
}

显然这个内置函数也可以在 mingw-w64 下工作。

关于c++ - CPUID 的内在信息之类的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17758409/

相关文章:

c++ - 快速将 2 个 double 数组交织成具有 2 个 float 和 1 个 int(循环不变)成员的结构数组,并使用 SIMD double->float 转换?

c++ - 强制将文件写入磁盘

c++ - C++ 包装器中的 C 可变参数函数

c++ - 通过管道与 PuTTY 通信

c++ - SSE _mm_store_ps 段错误问题

c++ - 为什么在语句中的其他任何地方都没有使用该值的情况下使用++i 而不是 i++ ?

optimization - 加载和转置八个 8 元素浮点向量

c++ - 从 MSDN 实现 __cpuid 示例给出了非常大的数字

ios - 在 iOS 上是否有检测 CPU 特性的 API?