c语言 - GCC 的__builtin_cpu_supports是否检查操作系统支持?



GCC编译器提供了一组内置来测试某些处理器功能,例如某些说明集的可用性。但是,根据此线程,我们也可能知道OS可能无法启用某些CPU功能。因此,问题是:__builtin_cpu_supports Interins是否还检查OS是否已启用了某些处理器功能?

no。

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

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

#include <stdio.h>
int main(void) {
  __builtin_cpu_init();
  printf("%dn", __builtin_cpu_supports ("sse"));
  printf("%dn", __builtin_cpu_supports ("avx"));
}

它返回8和512。这意味着__builtin_cpu_supports不检查OS是否禁用AVX。

是的,它确实如此。海湾合作委员会有一个错误,但它是在GCC 8左右修复的:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85100

相关内容

最新更新