我想检查运行时是否支持SSE4或AVX,这样我的程序可以利用特定于处理器的指令,而无需为每个处理器创建二进制文件。
如果我可以在运行时确定它,我可以使用一个接口并在不同的指令集之间切换。
答案 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中的矢量化程序使用它来选择要运行的程序集。