首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>内核技术>正文

Linux系统中使用GCC CPU参数优化代码编译

http://www.oklinux.cn  2007-09-10  来源: 赛迪网 kid  会员收藏  游客收藏  【 】 

使用特定的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"

共2页: 上一页 1 [2] 下一页

上一篇:Ubuntu Linux系统下安装设置PGPLOT   下一篇:Ubuntu Linux系统下Apt-get命令参数


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·基于2.6.9内核小型Linux系统制作与移植
·Linux系统的内核初始化过程详细解析
·Linux系统的引导过程详细解析
·Linux系统高手之路 内核编译过程解析
·Linux高手之内核编译过程解析
·Linux系统内核模块和驱动的编写过程
·Linux系统下编译支持NTFS的内核模块
·Linux系统中用内核KHTTPD实现Web服务加速
·Linux系统内核分析 使用GDB和QEMU来调试
·Linux操作系统的内核解读入门
·通过Linux系统的内核观察/proc/pid/statm
·编译Linux操作系统内核的步骤
·Debian Linux系统下的内核编译详细讲解
·VMware环境下Linux内核编译过程详细解析
·Linux操作系统的内核编译步骤
·Linux系统内核中网络参数的意义及其应用
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux系统下内核定时器的用法
·学习园地:Linux系统内核中判断大小的
·系统编译:如何给Make命令来传递参数
·Linux 2.6内核中sysfs文件系统简单概述
·Fedora 8 Linux系统的内核配置注意事项
·升级Linux内核的一般步骤方法
·Linux发行版知识普及:三个版本的CPUID
·编译安装Virtualbox驱动模块
· Linux系统的内核解读入门
·新手学堂 Linux系统的内核解读入门
·Linux系统内核中网络参数的意义及其应
·走向Linux系统高手之路 内核编译过程解
  阅读排行
· 深入理解LINUX内核中文版下载地址
·基于S3C44B0微处理器的uClinux内核引导
·Kernel command using Linux system ca
·Linux 2.6内核如何武装Fedora Core 2
·Linux操作系统的内核编译内幕详解
·Process priority and control on AIX
·推荐:Linux用户态与内核态的交互
·通过振动向Linux ThinkPad传输信息
·Linux操作系统源代码详细分析(二)
·Linux系统内核接收以太帧的处理程序
·揭秘Linux内核调试器之内幕
·Linux and symmetric multiprocessing
·主流嵌入式Linux系统下GUI解决方案
·用命令行加挂Linux的文件系统简介
·Linux内核和核心OS组件的测试与分析
网摘收藏: