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