【发布时间】:2011-01-25 02:37:54
【问题描述】:
我需要在安装软件之前确定处理器对 SSE2 的支持。据我了解,我想出了这个:
bool TestSSE2(char * szErrorMsg)
{
__try
{
__asm
{
xorpd xmm0, xmm0 // executing SSE2 instruction
}
}
#pragma warning (suppress: 6320)
__except (EXCEPTION_EXECUTE_HANDLER)
{
if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION)
{
_tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
return false;
}
_tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
return false;
}
return true;
}
这行得通吗?我不太确定如何测试,因为我的 CPU 支持它,所以我不会从函数调用中得到错误。
如何确定对 SSE2 的处理器支持?
【问题讨论】:
-
任何特定的操作系统?
-
据我所知,您的代码应该可以正常工作。我更喜欢 CPUID 方式,因为它更灵活一些,还可以让您访问一大堆其他 CPU 功能标志。
-
您可以运行虚拟化操作系统,并让它模拟非 SSE2 CPU。它可能不会很快,但它应该是准确的,不是吗?
-
对 SSE2 的处理器支持和操作系统支持是两个不同的东西。处理器可能支持 SSE2,因此在 CPUID 之后设置了正确的位。但是,操作系统可能没有启用它(我认为它需要启用 MMX 扩展)。对于 CPU 支持,Ashley 提供了答案。对于 Windows 下的操作系统支持,Timbo 提供了答案。我还没有看到 Linux 下操作系统支持的答案。我认为这些是针对 SSE2 操作系统支持的 GCC 测试:sse-6.c source file.
标签: c++ windows windows-xp sse2