And*_* R. 7 c gcc simd instruction-set intrinsics
GCC编译器提供了一组内置函数来测试某些处理器功能,例如某些指令集的可用性.但是,根据这个线程,我们也可能知道操作系统可能无法启用某些cpu功能.所以问题是:__builtin_cpu_supports内在函数还检查操作系统是否启用了某些处理器功能?
不。
我通过添加noxsaveLinux 内核启动选项禁用了 Skylake 系统上的 AVX 。当我执行cat /proc/cpuinfoAVX(和 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。
| 归档时间: | 
 | 
| 查看次数: | 687 次 | 
| 最近记录: |