【问题标题】:Checking if SSE is supported at runtime [duplicate]在运行时检查是否支持 SSE [重复]
【发布时间】:2015-05-24 12:38:31
【问题描述】:

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

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

【问题讨论】:

标签: c++ c sse simd avx


【解决方案1】:

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 支持“函数多版本化”,它允许你编写函数的多个版本,指定它应该使用的目标,并让 GCC 负责确保它被调用. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Function-Multiversioning.html

【讨论】:

  • 尽管这个问题被标记为重复问题,但你仍然教会了我一些新的和有用的东西。这是一个很好的例子,说明为什么我们不应该匆忙将问题标记为重复问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多