首页 > 解决方案 > GCC 如何检测处理器特性

问题描述

使用 gcc 标志 -march=native 可以针对正在运行的 cpu 启用特定于 CPU 的优化。(如果我错了,请纠正我)。gcc 如何检测这些特征?代码链接的额外点,以及与 clang/llvm 的比较。

更实际的是,我如何检测机器上的 cpu 功能(没有 gcc,或者非常旧的 gcc),然后在我的本地机器上为该机器编译。即 gcc -march=that_other_pc。(希望比为该架构编译 gcc 并在那里运行它更容易)。

标签: gccoptimizationclang

解决方案


事实上,Gcc 确实有一个 cpu 能力检测例程。如果当前构建的规范包含一个%:local_cpu_detect(args)构造,则相关架构的驱动程序将调用一个host_detect_local_cpu驱动程序函数,该函数将尝试查询当前系统 CPU 并从中获取所需的功能标志。

i386衍生拱门上,该过程大致如下所示: https ://github.com/gcc-mirror/gcc/blob/da8dff89fa9398f04b107e388cb706517ced9505/gcc/config/i386/driver-i386.c#L383

(简而言之,该函数cpuid根据需要调用操作码,然后解析返回的功能注册表)。


推荐阅读