检查运行时是否支持SSE

时间:2015-03-21 00:18:56

标签: c++ c sse simd avx

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

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

2 个答案:

答案 0 :(得分:6)

GCC有一种方法可以通过调用__builtin_cpu_init然后调用__builtin_cpu_is__builtin_cpu_supports来检查功能。 https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/X86-Built-in-Functions.html

在x86上,当使用C ++前端时,GCC支持“function multiversioning”,它允许你编写函数的多个版本,指定它应该使用的目标,并让GCC负责确保它被调用。 https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Function-Multiversioning.html

答案 1 :(得分:2)

在MSVC上,extern int __isa_available包含有关MSVC版本的CPU支持的信息。

MSVC 2013中的矢量化程序使用它来选择要运行的程序集。