检查运行时是否支持SSE

Tho*_*mas 4 c c++ sse simd avx

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

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

Tyl*_*ler 7

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

  • 尽管这个问题被标记为重复,但您仍然教会了我一些新的有用的东西。这是一个很好的例子,说明为什么我们不应该草率​​地将问题标记为重复。 (2认同)

归档时间:

查看次数:

3749 次

最近记录:

10 年,8 月 前