考虑到我正在用C++编写代码,如果可能的话,我想使用类似Intrinsics的解决方案来读取有关硬件的有用信息,我的关注/考虑事项是:
我必须回答的最后一个问题是:如何对本质进行类似的处理?因为除了CPUID操作码之外,我没有找到其他任何东西来获取此类信息。
发布于 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。
发布于 2013-07-20 04:34:04
类似于此的本质也通常是特定于编译器的。
MS VC++有一个__cpuid (和一个__cpuidex)来生成CPUID代码。
至少据我所知,gcc/g++并没有提供与之相当的东西。内联程序集似乎是唯一可用的选项。
发布于 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特征探测。
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_MPXhttps://stackoverflow.com/questions/17758409
复制相似问题