linux编译对cpu要求,Linux系统中使用GCC CPU参数优化代码编译

使用特定的GCC参数可以使编译出的程序执行效率有较大提升。具体如下:

1、优化原理:

在编译程序时,借助参数传递的方法,使用与系统CPU相匹配的gcc参数,编译出的程序就是为系统CPU而进行特定优化过的,因而执行速度和效率都会是最好。

2、注意事项

(1) 经过大量测试发现,在RedHat, CentOS系统中通常只能通过参数传递的方法进行编译优化,当然,如果愿意并且能够修改程序的MakeFile也可以达到这一效果,只不过比较复杂,工作量较大。其他在网上广为流传的方法(例如:直接通过.bashrc, /etc/profile声明参数系统变量、写入/etc/make.conf等)经过测试均没有效果。

(2) 对于Gentoo Linux或FreeBSD可以通过修改/etc/make.conf添加参数的方法来实现,而不必使用参数传递法。

3、优化步骤:

(1)确定系统CPU类型:

# cat /proc/cpuinfo | grep "model name"

执行后会看到系统中CPU的具体型号,记下CPU型号。

(2)使用参数传递方法进行编译:(以Pentium4 CPU为例)

此处以编译Apache为例说明如何使用参数传递:

# tar xzvf httpd-2.0.55.tar.gz

# cd httpd-2.0.55

CHOST="i686-pc-linux-gnu" \

CFLAGS="-O3 \

-msse2 \

-mmmx \

-mfpmath=sse \

-mcpu=pentium4 \

-march=pentium4 \

-pipe \

-fomit-frame-pointer" \

CXXFLAGS="-O3 \

-msse2 \

-mmmx \

-mfpmath=sse \

-funroll-loops \

-mcpu=pentium4 \

-march=pentium4 \

-pipe \

-fomit-frame-pointer" \

./configure ……

# make

# make install

这样就通过函数传递方法实现了编译优化。下面对其中的一些参数进行具体说明:

-O3:相对于-O、-O1、-O2,-O3开启了所有GCC支持的优化特性;

-msse2:开启CPU所支持的sse2指令集;

-mmmx:参考-msse2

-mfpmath=sse:为指定指令集生成浮点运算特性(优化浮点运算功能);

-mcpu:指定CPU型号;

-march:指定CPU型号,基本同-mcpu,GCC根据-march设定的CPU型号决定在生成代码时可以使用哪些种类的指令。(注意!-march参数在某些CPU型号中不可用!)

-pipe:使用管道(pipe)方法替代临时文件方法在编译的不同阶段之间进行通讯。

附:常见CPU优化参数

386:

CHOST="i386-pc-linux-gnu"

CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"

486:

CHOST="i486-pc-linux-gnu"

CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"

Pentium (Intel):

CHOST="i586-pc-linux-gnu"

CFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"

Pentium MMX (Intel):

CHOST="i586-pc-linux-gnu"

CFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"

Pentium PRO (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"

Pentium II (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

Celeron (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"

Pentium III (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

Celeron2 (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

Celeron (Willamette-Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

Pentium 4 (Intel):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

K6 (AMD):

CHOST="i586-pc-linux-gnu"

CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"

K6-2 (AMD):

CHOST="i586-pc-linux-gnu"

CFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"

K6-3 (AMD):

CHOST="i586-pc-linux-gnu"

CFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"

Athlon (AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"

Athlon-tbird, aka K7 (AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"

Athlon-tbird XP (AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

Athlon 4(AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"

Athlon XP (AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

Athlon MP (AMD):

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"

603 (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

603e (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

604 (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

604e (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

750 aka as G3 (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-mcpu=750 -O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-mcpu=750 -O3 -pipe -fomit-frame-pointer -fsigned-char"

7400, aka G4 (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-mcpu=7400 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"

CXXFLAGS="-mcpu=7400 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"

7450, aka G4 second generation (PowerPC):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-mcpu=7450 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"

CXXFLAGS="-mcpu=7450 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"

PowerPC (If you don't know which one):

CHOST="powerpc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"

Sparc:

CHOST="sparc-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer"

Sparc 64:

CHOST="sparc64-unknown-linux-gnu"

CFLAGS="-O3 -pipe -fomit-frame-pointer"

CXXFLAGS="-O3 -pipe -fomit-frame-pointer"

(责任编辑:A6)

本站文章仅代表作者观点,本站仅传递信息,并不表示赞同或反对.转载本站点内容时请注明来自-Linux伊甸园。如不注明,将根据《互联网著作权行政保护办法》追究其相应法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值