以下代码是否有效以检查CPU是否支持SSE3指令集?
使用该IsProcessorFeaturePresent()功能显然不适用于Windows XP(请参阅http://msdn.microsoft.com/en-us/library/ms724482(v=vs.85).aspx).
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;
}
Run Code Online (Sandbox Code Playgroud) 我想知道这里的人是否有一些很好的C++ CPUID实现示例,可以从任何托管的.net语言中引用.
此外,如果不是这种情况,我应该知道X86和X64之间的某些实现差异吗?
我想使用CPUID获取我的软件运行的机器上的信息(crashreporting等...),我想尽可能保持所有内容的兼容性.
我问的主要原因是因为我在编写可能是所有机器指令的内容时总是菜鸟,尽管我有关于CPU寄存器的基本知识等等...
在人们开始告诉我谷歌之前:我在网上找到了一些例子,但通常他们并不打算允许来自托管代码的交互,并且没有一个示例针对X86和X64.大多数示例似乎都是特定于X86的.