And*_* R. 7 c gcc simd instruction-set intrinsics
GCC编译器提供了一组内置函数来测试某些处理器功能,例如某些指令集的可用性.但是,根据这个线程,我们也可能知道操作系统可能无法启用某些cpu功能.所以问题是:__builtin_cpu_supports
内在函数还检查操作系统是否启用了某些处理器功能?
不。
我通过添加noxsave
Linux 内核启动选项禁用了 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"));
}
Run Code Online (Sandbox Code Playgroud)
它返回 8 和 512。这意味着__builtin_cpu_supports
不检查操作系统是否禁用了 AVX。
归档时间: |
|
查看次数: |
687 次 |
最近记录: |