`
dr2tr
  • 浏览: 143851 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

gcc最佳编译参数

阅读更多
文着重介绍在不同的硬件环境下给GCC指定哪些参数才可以得到最佳的性能。
  这篇文章是从一个名为Gentoo Linux的发行版的编程说明书里面分离出来的,希望对大家编译程序有帮助。

出处:http://www.linuxfab.cx

一、1.2版(gcc 2.9.x版)

i386 (Intel), do you really want to install gentoo on that?
CHOST="i386-pc-linux-gnu"
CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"

i486 (Intel), do you really want to install gentoo on that?
CHOST="i486-pc-linux-gnu"
CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"

Pentium, Pentium MMX+, Celeron (Mendocino) (Intel)
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"

Pentium Pro/II/III/4, Celeron (Coppermine), Celeron (Willamette?) (Intel)
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=i686 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i686 -O3 -pipe -fomit-frame-pointer"

Eden C3/Ezra (Via)
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=i586 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i586 -O3 -pipe -fomit-frame-pointer"

Quote : I did the original gentoo install using 1.2, with gcc 2.95 using -march=i586. i686 won't work.

K6 or beyond (AMD)
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"

(A Duron will report "Athlon" in its /proc/cpuinfo)

Athlon (AMD)
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"

For the following, i don't know of any flag that enhance performances..., do you ?

PowerPC
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer"

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"


二、1.4版(gcc 3.x版):


i386 (Intel), do you really want to install gentoo on that ?
CHOST="i386-pc-linux-gnu"
CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"

i486 (Intel), do you really want to install gentoo on that ?
CHOST="i486-pc-linux-gnu"
CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"

Pentium 1 (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 (Mendocino), aka Celeron1 (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"

Celeron (Coppermine) aka 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"

Eden C3/Ezra (Via)
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"

quote : the ezra doesn't have any special instructions that you could optimize for, just consider is a K6-3...basically
a p2 with 3dnow

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"

Note: do not use -march=

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"

Note: do not use -march=

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"

Note: do not use -march=

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"

分享到:
评论

相关推荐

    gcc.rar_gcc

    **GCC(GNU Compiler Collection)**是GNU项目的一部分,它是一个开源的、跨平台的编译器套件,用于将源代码编译...通过阅读《gcc最佳编译参数.doc》文档,可以更深入地了解这些细节,从而更好地利用GCC进行开发工作。

    GCC编译优化指南 很好的资料

    例如,当编译Web服务器时,可以根据服务器的特点和负载情况选择合适的配置选项和编译器标志,以达到最佳的性能表现。 #### 七、结论 通过对《GCC编译优化指南》的解析可以看出,GCC提供了丰富的工具和选项来帮助...

    gcc 中文帮助文档

    gcc makefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响 ...不同的CPU下最佳编译参数 代码维护 简单cvs automake diff rcs 内核重编译常见故障 cvs 共享库工具 代码优化 GNU 编码标准 书籍

    GNU GCC编译器手册

    根据描述中提到的手册,下面列举了一些常见的GCC编译参数及其含义: 1. **-Wall**:启用所有警告信息。 - 这个选项可以确保编译过程中尽可能多地报告潜在的问题,帮助开发者避免因忽略小错误而导致的大问题。 2. ...

    Visual GCC,最好的GCC&GDB集成开发环境(3)

    2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...

    Visual GCC,最好的gcc&gdb的集成开发环境(1)

    2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...

    Redis6离线编译部署手册和gcc离线编译升级,以及程序包。

    Redis 6 离线编译部署涉及到一系列的步骤,包括环境准备、Redis 源码编译、GCC 的离线升级以及 Redis 的基本操作。首先,你需要在系统上安装 Redis,这通常需要一个合适的 GCC 编译环境,因为 Redis 是用 C++ 编写的...

    GCC使用教程.pdf

    目 录 1. gcc 1. makefile 写法 ...7. 不同的 CPU 下最佳编译参数 8. 代码维护 1. 简单 cvs 2. automake 3. diff 4. rcs 5. 内核重编译常见故障 6. cvs 7. 共享库工具 8. 代码优化 9. GNU 编码标准 10. 书籍

    Visual GCC,最好的GCC&GDB集成开发环境(4)

    2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...

    Visual GCC,最好的gcc&gdb集成开发环境(2)

    2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...

    内网环境下Linux环境gcc gcc-c++编译器安装所需依赖

    在内网环境中,Linux系统上的开发工作经常需要安装GCC(GNU Compiler Collection)和G++编译器,以便能够编译C语言和C++语言的程序。GCC是开源的,提供了对多种编程语言的支持,而G++是GCC的一部分,专门用于C++的...

    GCC.rar_GCC 使用 手册_gcc_gcc 使用_gcc 手册_linux gcc

    "GCC使用指南"则是一份实践性的教程,它可能包含了一系列的实例和最佳实践,教导用户如何使用GCC编译简单的程序,如何处理编译错误,以及如何利用GCC进行多文件项目的构建。这有助于新接触GCC的开发者快速上手,并...

    Linux GCC使用教程

    #### 六、不同的CPU下最佳编译参数 - 针对不同的CPU架构选择合适的编译参数非常重要,这可以显著提高程序性能。 - 例如,针对Intel Core i7处理器,可以使用`-mtune=core2`等选项。 #### 七、代码维护与自动化工具...

    arm-linux-gcc命令参数介绍

    在了解 arm-linux-gcc 的命令参数之前,我们先简单回顾一下 GCC 的编译流程: 1. **预处理 (Pre-Processing)**:在这个阶段,源代码中的宏定义和文件包含会被展开。 2. **编译 (Compiling)**:预处理后的源代码被...

    GCC 使用教程

    不同CPU下的最佳编译参数 - 针对不同的处理器架构,选择合适的编译参数可以显著提高程序的性能。 - 例如,对于x86_64架构,可以使用`-march=native`来自动选择最佳的编译选项。 #### 9. 代码维护 - **简单CVS**...

    GCC 中文手册

    7. **语言特定指南**:为每种支持的语言提供特定的指南,包括语法、特性以及如何最佳地利用GCC编译这些语言的代码。 8. **移植性**:讨论如何在不同平台上使用GCC,以及如何编写可移植的代码。 **GCC使用教程.doc*...

    GCC参数中文手册.pdf

    本手册专注于GCC的参数使用,帮助开发者理解和掌握如何有效地优化编译过程。 **总览** GCC的使用通常涉及一系列选项和文件名。例如,`gcc`和`g++`是用于C和C++的编译器,它们可以接受一系列选项(option)和要处理...

    gcc使用教程.docx

    6. **CPU下的最佳编译参数**:针对不同的CPU架构,GCC可以使用不同的编译参数来优化代码,以适应特定处理器的特性。 7. **代码维护工具**:如cvs( Concurrent Versions System)用于版本控制,automake帮助生成...

    gcc编译器用户手册

    这一模式允许用户通过命令行参数指定编译过程中的各项设置,如预处理、编译、汇编和链接等阶段的具体操作。 #### 警告(WARNING) GCC的手册页内容源自其完整的文档,主要用于解释编译选项的含义,但这些手册页...

Global site tag (gtag.js) - Google Analytics