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

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

  1. linux cp -r 参数,Linux系统中cp命令的参数及用法详解

    Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...

  2. 优化计算机组策略,提升运行速度:Win7系统中组策略的实用优化技巧

    Win7操作系统中组策略的优化技巧分享给大家,组策略是管理员为用户和计算机定义并控制程序.网络资源以及操作系统行为的主要工具,我们可以通过它来设置各种软件和用户策略等,而对于系统的优化想必是必不可少的 ...

  3. openssh arm linux 编译,openssh编译安装到ARM嵌入式系统中

    目录 一.SSHD编译(此步骤在虚拟机上执行) 1.1 在/root/目录下创建ssh目录 1.2 交叉编译zlib 1.3交叉编译openssl 1.4交叉编译openssh 二.移植(此步骤在开发 ...

  4. cpu时间片 linux,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 图 1 RT-Linux结构 RT -Linux的关键技术是通过软件来模拟硬件的中断控制器.当Linux系统要封锁CPU的中断时时,RT-Linux中的实 ...

  5. 在linux系统中如何查看cpu,Linux中如何查看CPU的信息

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 02:53:32 up 16 days, ...

  6. linux 【CPU性能】 系统中的软中断使用率升高怎么办?

    文章目录 1. 回顾 2. 从"取外卖"看中断 3. 软中断 4. 查看软中断和内核线程 5. 案例 6. 小结 1. 回顾 用一个不可中断进程的案例,带你学习了 iowait(也 ...

  7. linux上运行gfortran,linux – gfortran:在64位系统中编译32位可执行文件

    我在AMD Athlon(tm)64 X2双核处理器5200×2上运行Ubuntu 12.10(64位), Linux内核3.5.0-51通用.我有GNU Fortran(Ubuntu / Linar ...

  8. Linux播放器MPlayer嵌入式开发系统中的应用

    摘要:本文论述了MPlayer在嵌入式开发系统中的应用,说明了如何在嵌入式开发板的平台上实现MPlayer的配置.编译.安装及调试过程. 关键词:嵌入式系统:MPlayer:MEncoder 引言 嵌 ...

  9. Linux系统中使用vim编写C语言代码实现过程

    博主这里是阿里云CentOs7的系统,以下涉及到的yum软件安装命令,在其他Linux发行版上可能会有些许不同,望读者安装时注意,如出现命令无法识别请根据对应发行版自行百度. 使用Linux进行C语言 ...

最新文章

  1. 用计算机采集卡检测压力传感器信号故障,计算机联网检测系统应用研究
  2. 手工模拟实现 Docker 容器网络!
  3. TurboMail最新版本4.1.0之我见(一)
  4. python图像边缘检测
  5. 基于WinSvr2016(TP)构建的“超融合技术架构”进阶篇
  6. 【阿里聚安全·安全周刊】Python库现后门 可窃取用户SSH信息|Facebook再曝300万用户数据泄露...
  7. error: goland --build constraints exclude all Go files
  8. RNN-LSTM循环神经网络-03Tensorflow进阶实现
  9. 细数Android开发者的艰辛历程,已拿offer附真题解析
  10. 百度富文本编辑器的应用技巧---在一个页面中使用多个样式不同功能不同的编辑器...
  11. 运行Docker时不加sudo
  12. HDU 4664 Triangulation(SG函数)
  13. 计算机组成原理--白中英版 全部知识点
  14. 项目进度计划表的制作及甘特图的绘制
  15. 计算机系统的性能能被准确测量吗,信息技术 基于计算机的软件系统的性能测量与评级...
  16. 高通apq8096连接外网
  17. git pull --rebase的作用是什么,它与git pull有什么区别?
  18. Android学习笔记-转载SQLite
  19. scrum立会报告+燃尽图(第二周第六次)
  20. Python语言程序设计 - 测验6: 组合数据类型 (第6周)

热门文章

  1. Clion配置Qt5环境
  2. window脚本,常用命令与脚本实例
  3. 2022-1-9数据库期末复习(七)第四章——数据库安全性
  4. 2021-06-28剑指offer26.树的子结构
  5. 天津大学计算机专业复试,20考研同学看天津大学计算机考研经验帖
  6. c语言程序课程设计投票程序,C语言课程设计--C语言投票程序.doc
  7. 互联网虚拟大脑与智慧地球
  8. python绘制多边形_在python matplotlib中绘制三维多边形
  9. spacy.load(“en_core_web_sm“)###OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
  10. python字节码文件后缀_如何生成Python的字节码文件