首页  >  文章  >  后端开发  >  提供的代码足以检查 CPU 上的 SSE3 支持吗?

提供的代码足以检查 CPU 上的 SSE3 支持吗?

Susan Sarandon
Susan Sarandon原创
2024-11-16 16:53:03335浏览

Is the Provided Code Sufficient for Checking SSE3 Support on CPUs?

检查 CPU 上的 SSE3 支持

问题

以下代码是否足以验证 CPU 是否支持 SSE3 指令集?

bool CheckSSE3()
{
    int CPUInfo[4] = {-1};

    //-- Get number of valid info ids
    __cpuid(CPUInfo, 0);
    int nIds = CPUInfo[0];

    //-- Get info for id "1"
    if (nIds >= 1)
    {
        __cpuid(CPUInfo, 1);
        bool bSSE3NewInstructions = (CPUInfo[2] & 0x1) || false;
        return bSSE3NewInstructions;     
    }

    return false;      
}

答案

不幸的是,提供的代码片段在 Windows XP 上有限制。为了克服这个问题并确保在更广泛的系统上准确检测 SSE3 支持,建议采用更全面的解决方案。

以下方法可以在 Windows XP 和其他操作系统上提供可靠的 SSE3 检测:

// Access CPUID instruction
#ifdef _WIN32
#define cpuid(info, x)    __cpuidex(info, x, 0)
#else
#include <cpuid.h>
void cpuid(int info[4], int InfoType){
    __cpuid_count(InfoType, 0, info[0], info[1], info[2], info[3]);
}
#endif

// Detect SSE3 support
bool HW_SSE3;
int info[4];
cpuid(info, 0);
int nIds = info[0];
if (nIds >= 0x00000001){
    cpuid(info,0x00000001);
    HW_SSE3   = (info[2] &amp; ((int)1 <<  0)) != 0;
}

以上是提供的代码足以检查 CPU 上的 SSE3 支持吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn