首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPUID的本质喜欢信息?

CPUID的本质喜欢信息?
EN

Stack Overflow用户
提问于 2013-07-20 03:40:39
回答 4查看 12.2K关注 0票数 17

考虑到我正在用C++编写代码,如果可能的话,我想使用类似Intrinsics的解决方案来读取有关硬件的有用信息,我的关注/考虑事项是:

  • 我不知道如何组装,这将是一个相当大的投资,仅仅为了获取这种信息(虽然它看起来像CPU,它只是关于翻转值和读取寄存器。)
  • 至少有两个流行的asm语法( Intel和AT&T ),所以它是支离破碎的。
  • 奇怪的是,Intrinsics现在比asm代码更受欢迎和支持。
  • 并不是我现在注意到的所有编译器都支持内联asm,MSVC 64位是其中之一;我担心在深入研究我必须使用的不同编译器的特性集时,我会发现其他类似的缺陷。
  • 考虑到这个trand,我认为这对我来说是更有效率的投资于Intrinsics,它也应该比任何asm代码容易得多。

我必须回答的最后一个问题是:如何对本质进行类似的处理?因为除了CPUID操作码之外,我没有找到其他任何东西来获取此类信息。

EN

回答 4

Stack Overflow用户

发布于 2013-07-21 04:33:08

Gcc包括一个cpuid界面:

http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/i386/cpuid.h

这些似乎没有很好的文档记录,但在这里可以找到示例用法:

普通;f=gcc/config/i 386/驱动器-i386.c

注意,当ecx的初始值重要时,必须使用__cpuid_count()而不是__cpuid(),例如使用avx/avx 2检测。

正如user2485710所指出的,gcc可以为您完成所有的cpu功能检测工作。从gcc 4.8.1开始,__builtin_cpu_supports()支持的全部特性列表是: cmov、mmx、popcnt、sse、sse2、sse3、ssse3、sse4.1、sse4.2、avx和avx2。

票数 8
EN

Stack Overflow用户

发布于 2013-07-20 04:34:04

类似于此的本质也通常是特定于编译器的。

MS VC++有一个__cpuid (和一个__cpuidex)来生成CPUID代码。

至少据我所知,gcc/g++并没有提供与之相当的东西。内联程序集似乎是唯一可用的选项。

票数 7
EN

Stack Overflow用户

发布于 2017-07-25 18:19:58

对于x86/x64,Intel提供了一个名为_may_i_use_cpu_feature的内部特性。您可以在英特尔Intrinsics指南页面的General类别下找到它。下面是英特尔文件的翻版。

GCC在本质上应该跟随英特尔,所以它应该可以在GCC的领导下使用。我不清楚微软是否提供它,因为它们提供了大部分(但不是全部)英特尔的本质。

我不知道什么是手臂。据我所知,ARM下没有__builtin_cpu_supports("neon")__builtin_cpu_supports("crc32")__builtin_cpu_supports("aes")__builtin_cpu_supports("pmull")__builtin_cpu_supports("sha")等。对于ARM,您必须执行CPU特征探测

代码语言:javascript
复制
Synopsis

int _may_i_use_cpu_feature (unsigned __int64 a)

#include "immintrin.h"

Description

Dynamically query the processor to determine if the processor-specific feature(s) specified
in a are available, and return true or false (1 or 0) if the set of features is
available. Multiple features may be OR'd together. This intrinsic does not check the
processor vendor. See the valid feature flags below:

Operation

    _FEATURE_GENERIC_IA32
    _FEATURE_FPU
    _FEATURE_CMOV
    _FEATURE_MMX
    _FEATURE_FXSAVE
    _FEATURE_SSE
    _FEATURE_SSE2
    _FEATURE_SSE3
    _FEATURE_SSSE3
    _FEATURE_SSE4_1
    _FEATURE_SSE4_2
    _FEATURE_MOVBE
    _FEATURE_POPCNT
    _FEATURE_PCLMULQDQ
    _FEATURE_AES
    _FEATURE_F16C
    _FEATURE_AVX
    _FEATURE_RDRND
    _FEATURE_FMA
    _FEATURE_BMI
    _FEATURE_LZCNT
    _FEATURE_HLE
    _FEATURE_RTM
    _FEATURE_AVX2
    _FEATURE_KNCNI
    _FEATURE_AVX512F
    _FEATURE_ADX
    _FEATURE_RDSEED
    _FEATURE_AVX512ER
    _FEATURE_AVX512PF
    _FEATURE_AVX512CD
    _FEATURE_SHA
    _FEATURE_MPX
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17758409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档