检查是否在运行时支持SSE技术

7

我希望在运行时检查是否支持SSE4或AVX,这样我的程序可以利用处理器特定指令而不必为每个处理器创建一个二进制文件。

如果我能够在运行时确定它,我可以使用接口并在不同的指令集之间切换。


1
包括您将使用哪些编译器和平台是一个好主意。 - Ulfalizer
2
https://dev59.com/QW025IYBdhLWcg3wQDhb#7495023 可能会回答你的问题。 - cremno
3
因为这个函数在页面上似乎排得比较靠后,所以__builtin_cpu_supports()可能是GCC 4.8+中最容易的选项:https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions。MSVC肯定有类似的功能。它们可能只是使用CPUID:http://en.wikipedia.org/wiki/CPUID。 - Ulfalizer
2个回答

14

2
尽管这个问题被标记为重复,但你仍然教给了我新的有用的东西。这是一个很好的例子,说明我们不应该过于匆忙地将问题标记为重复。 - Z boson

3
在MSVC中,extern int __isa_available包含了有关MSVC构建的CPU支持信息。
它被MSVC 2013中的向量化器用于选择要运行的汇编代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接