LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: fallening

大家都用什么CFLAGS?

[复制链接]
发表于 2009-3-29 03:31:09 | 显示全部楼层
对于core2(64位环境)

-march 性能从大到小为:core2 native x86-64 未指定

-mtune 性能从大到小为:core2 generic 未指定

-fomit-frame-pointer指定要比不指定好很多

O2和O3之间的选择肯定是O2,不要指望O3能带来好的性能,反而弄巧成拙

至于msse3和mssse3,如果你肯定你的程序用到了这个特性,那么指定,对于99.99999%的程序来说,最好不要指定这个选项,比如用上面附件里的程序测试,同样的参数执行很多遍的时候,不指定msse3要比指定msse3带来更加平滑的曲线,而性能平均值甚至不指定时还要好一点。
回复 支持 反对

使用道具 举报

发表于 2009-3-29 10:06:37 | 显示全部楼层
Post by hubert_star;1966929
对于core2(64位环境)

-march 性能从大到小为:core2 native x86-64 未指定

-mtune 性能从大到小为:core2 generic 未指定

-fomit-frame-pointer指定要比不指定好很多

O2和O3之间的选择肯定是O2,不要指望O3能带来好的性能,反而弄巧成拙

至于msse3和mssse3,如果你肯定你的程序用到了这个特性,那么指定,对于99.99999%的程序来说,最好不要指定这个选项,比如用上面附件里的程序测试,同样的参数执行很多遍的时候,不指定msse3要比指定msse3带来更加平滑的曲线,而性能平均值甚至不指定时还要好一点。


加上 "-pipe",编译起来快一点
回复 支持 反对

使用道具 举报

发表于 2009-3-29 11:13:49 | 显示全部楼层
Post by bingyuan;1966976
加上 "-pipe",编译起来快一点

呵呵,这个肯定要加的
回复 支持 反对

使用道具 举报

发表于 2009-3-29 11:26:00 | 显示全部楼层
我的 CFLAGS="-march=core2 -O2 -pipe"

http://wiki.archlinux.org/index.php/Safe_Cflags

-fomit-frame-pointer是干啥用的
回复 支持 反对

使用道具 举报

发表于 2009-3-29 11:51:00 | 显示全部楼层
刚看了下wiki上的:
Note: for gcc 4.3.0 for Core2Duo (or Core2Quad) and x86_64 set CFLAGS="-march=core2 -O2 -pipe"

我用的i686的源   不过一直设置的core2
回复 支持 反对

使用道具 举报

发表于 2009-3-29 11:58:26 | 显示全部楼层
-fomit-frame-pointer
    对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,同时对许多函数提供一个额外的寄存器。所有"-O"级别都打开它,但仅在调试器可以不依靠栈指针运行时才有效。在AMD64平台上此选项默认打开,但是在x86平台上则默认关闭。建议显式的设置它。

在X86-64上好像是默认打开的,但是我强制指定了以后效率要高一些,不管是什么平台,这个最好强制指定一下。
回复 支持 反对

使用道具 举报

发表于 2009-3-29 12:22:30 | 显示全部楼层
Post by hubert_star;1967031
-fomit-frame-pointer
    对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,同时对许多函数提供一个额外的寄存器。所有"-O"级别都打开它,但仅在调试器可以不依靠栈指针运行时才有效。在AMD64平台上此选项默认打开,但是在x86平台上则默认关闭。建议显式的设置它。

在X86-64上好像是默认打开的,但是我强制指定了以后效率要高一些,不管是什么平台,这个最好强制指定一下。


哈 这个好像的确可以提升性能 学习了XD
回复 支持 反对

使用道具 举报

发表于 2009-3-29 15:20:12 | 显示全部楼层
repo里面有的东西从没自己编译过
自己偶尔编译时用 core2, native和O2
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表