如何确定sse3指令set的CPU支持set
否,代码shippet对于在Windows XP上检查SSE3支持无效。
Solution:
Here's a more reliable method for detecting CPU support for SSE3 and various other instruction sets:
Code:
#ifdef _WIN32
// Windows
#define cpuid(info,x)__cpuidex(info,x,0)
#别的
// GCC内在
#include
void cpuid(int info [4],int Infotype){
__cpuid_count(Infotype,0,Info [0],INFO [1],INFO [2],INFO [3]);
}
#endif
// MISC。
bool hw_mmx;
bool hw_x64;
bool hw_abm; //高级位操纵
bool hw_rdrand;
bool hw_bmi1;
bool hw_bmi2;
bool hw_adx;
bool hw_prefetchwt1;
// SIMD:128位
bool hw_sse;
bool hw_sse2;
bool hw_sse3;
bool hw_ssse3;
bool hw_sse41;
Bool HW_SSE42;
bool hw_sse4a;
bool hw_aes;
bool hw_sha;
// SIMD:256位
bool hw_avx;
bool hw_xop;
bool hw_fma3;
bool hw_fma4;
bool hw_avx2;
// SIMD:512位
bool hw_avx512f; // AVX512基金会
bool hw_avx512cd; // AVX512冲突检测
bool hw_avx512pf; // AVX512预取
bool hw_avx512er; // avx512指数倒数
bool hw_avx512vl; // avx512矢量长度扩展
bool hw_avx512bw; // avx512字节字
Bool HW_AVX512DQ; // avx512双字QuadWord
bool hw_avx512ifma; // avx512整数52位融合乘数添加
bool hw_avx512vbmi; // avx512矢量字节操纵说明
int信息[4];
CPUID(INFO,0);
int nids = info [0];
CPUID(INFO,0x80000000);
未签名的nexids = info [0];
//检测功能
如果(nids> = 0x00000001){
CPUID(INFO,0x00000001);
hw_mmx =(info [3]&((int)1 = 0x00000007){
CPUID(INFO,0x00000007);
hw_avx2 =(info [1]&((int)1 = 0x80000001){
CPUID(INFO,0x80000001);
hw_x64 =(info [3]&((int)1
Using this method, you can determine whether a CPU supports the SSE3 instruction set by checking the HW_SSE3 boolean variable after executing the code.
Note:
Keep in mind that detecting CPU support is only one aspect.要在代码中实际利用这些说明,您可能需要根据所使用的特定编程语言和操作系统进行调整。