GCC选项,用于在给定CPU架构上进行优化

nav*_*jan 6 c gcc intel

我正在研究Nehalam/westmere英特尔微架构CPU.我想为此架构优化我的代码.GCC是否有专门的编译标志或C函数可以帮助我提高代码的运行时性能?

我已经在使用-o3了.

Language of the Code - C
Platform - Linux
GCC Version - 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我有一些浮点比较,它们完成了一百多万次.

请假设代码已经过最佳优化.

Jen*_*edt 18

首先,如果您真的想从像这样的新处理器上获得优化,那么您应该安装最新版本的编译器.4.4几年前出现了,即使它似乎仍然存在,我怀疑新的优化代码是否已经向后推送.(当前版本是4.7)

Gcc有一个catch-all优化标志,通常应该生成针对编译体系结构优化的代码:-march=native.与-O3此一起应该是你需要的一切.

(对于本网站的未来问题,请使用完整的英语语法和标点符号.)

  • 如果您不是为主机构建的,则可以使用-march = nehalem,-march = sandybridge,-march = haswell,-march = bdver1(Bulldozer),-march = bdver3 (Steamroller),-march = silvermont等,等等。使用-mtune调整特定的CPU,而无需使用会在较旧的CPU上出错的指令集扩展。例如,-march = nehalem -mtune = haswell是-msse4.2 -mpopcnt -mtune = haswell的简写。 (3认同)

Ser*_*kov 16

警告:答案不正确.

您实际上可以自己分析所有已禁用和已启用的优化.在您的计算机上运行:

gcc -O3 -Q --help=optimizers | grep disabled
Run Code Online (Sandbox Code Playgroud)

然后阅读有关仍然禁用的标志,并可以根据 gcc文档影响性能.


rub*_*nvb 6

你想要添加一个-march=...选项.本...应与什么是最接近你的CPU架构进行更换(有往往是微小的差别)描述的是i386/x86_64的选项GCC在这里.

我会使用core2因为corei7(你想要的那个)仅在GCC 4.6及更高版本中可用.请在此处查看GCC 4.6拱门列表.