gcc的__builtin_cpu_supports检查OS支持吗?

时间:2018-02-08 04:31:33

标签: c gcc simd intrinsics instruction-set

GCC编译器提供了一组builtins来测试某些处理器功能,例如某些指令集的可用性。但是,根据this线程,我们也可能知道操作系统可能无法启用某些cpu功能。所以问题是:__builtin_cpu_supports内在函数是否也检查操作系统是否启用了某些处理器功能?

1 个答案:

答案 0 :(得分:4)

没有

我通过在Linux内核启动选项中添加noxsave来禁用我的Skylake系统上的AVX。当我执行cat /proc/cpuinfo AVX(和AVX2)时不再出现,当我使用AVX指令运行代码时,它会崩溃。这告诉我操作系统已禁用AVX。

但是,当我编译并运行以下代码时

#include <stdio.h>

int main(void) {
  __builtin_cpu_init();
  printf("%d\n", __builtin_cpu_supports ("sse"));
  printf("%d\n", __builtin_cpu_supports ("avx"));
}

它返回8和512.这意味着__builtin_cpu_supports不检查操作系统是否禁用了AVX。