gcc - GCC 如何检测处理器特性
问题描述
使用 gcc 标志 -march=native 可以针对正在运行的 cpu 启用特定于 CPU 的优化。(如果我错了,请纠正我)。gcc 如何检测这些特征?代码链接的额外点,以及与 clang/llvm 的比较。
更实际的是,我如何检测机器上的 cpu 功能(没有 gcc,或者非常旧的 gcc),然后在我的本地机器上为该机器编译。即 gcc -march=that_other_pc。(希望比为该架构编译 gcc 并在那里运行它更容易)。
解决方案
事实上,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
根据需要调用操作码,然后解析返回的功能注册表)。
推荐阅读
- angular - api响应后如何延迟加载模块?
- php - php中的sprintf,格式化字符串,其中包含百分号
- pseudocode - 伪代码——我如何“覆盖”数字?
- timer - 关于计时器 - 使用 Microsoft Bot Framework v4 开发了一个机器人
- javascript - 如何在一个组件中拥有一个通用功能,并在事件发出时在另一个组件中使用它?
- css - 如何在 Angular 中使用 ngFor 从 JSON 数组构造单个字符串
- android - 如何隐藏recyclerview适配器中的第一个参数?
- powershell - 通过 AZURE realse 管道更新配置文件中的多个连接字符串
- dart - 是否可以将项目添加到 Dart 流中包含的列表中?
- mongodb - 如何查询 mongodb 以根据值嵌套参数获取结果?