文着重介绍在不同的硬件环境下给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(GNU Compiler Collection)**是GNU项目的一部分,它是一个开源的、跨平台的编译器套件,用于将源代码编译...通过阅读《gcc最佳编译参数.doc》文档,可以更深入地了解这些细节,从而更好地利用GCC进行开发工作。
例如,当编译Web服务器时,可以根据服务器的特点和负载情况选择合适的配置选项和编译器标志,以达到最佳的性能表现。 #### 七、结论 通过对《GCC编译优化指南》的解析可以看出,GCC提供了丰富的工具和选项来帮助...
gcc makefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响 ...不同的CPU下最佳编译参数 代码维护 简单cvs automake diff rcs 内核重编译常见故障 cvs 共享库工具 代码优化 GNU 编码标准 书籍
根据描述中提到的手册,下面列举了一些常见的GCC编译参数及其含义: 1. **-Wall**:启用所有警告信息。 - 这个选项可以确保编译过程中尽可能多地报告潜在的问题,帮助开发者避免因忽略小错误而导致的大问题。 2. ...
2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...
2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...
Redis 6 离线编译部署涉及到一系列的步骤,包括环境准备、Redis 源码编译、GCC 的离线升级以及 Redis 的基本操作。首先,你需要在系统上安装 Redis,这通常需要一个合适的 GCC 编译环境,因为 Redis 是用 C++ 编写的...
在本文中,我们将详细介绍如何在CentOS 6.6 64位操作系统上进行MySQL 5.6.22的实战部署,包括从下载源码包到编译安装的具体步骤以及重要的编译参数解析。通过本指南,读者可以了解整个安装过程中的关键技术点,并...
目 录 1. gcc 1. makefile 写法 ...7. 不同的 CPU 下最佳编译参数 8. 代码维护 1. 简单 cvs 2. automake 3. diff 4. rcs 5. 内核重编译常见故障 6. cvs 7. 共享库工具 8. 代码优化 9. GNU 编码标准 10. 书籍
用户在下载和解压了这个压缩包之后,通常需要按照以下步骤进行操作:首先解压tar.gz格式的压缩包,然后执行配置脚本,根据自己的需要调整编译参数,最后编译和安装。在编译过程中,可能需要依赖一些特定的库文件和...
2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...
2.以可视化方式设置几十种GCC常用编译参数,并有简要的中文说明; 3.可导出Windows和Linux平台下的Makefile和编译命令,免除手工编写Makefile的不便; 4.可调试本机程序,也可以远程调试linux主机上的程序;强大的可视化...
环境配置时还要考虑交叉编译器的路径设置、编译参数的设定等。 代码组织和模块化是提高软件质量的重要手段。在模板中,通常会定义好项目结构,包括源代码目录、头文件目录、中间文件目录等。良好的模块划分可以帮助...
在内网环境中,Linux系统上的开发工作经常需要安装GCC(GNU Compiler Collection)和G++编译器,以便能够编译C语言和C++语言的程序。GCC是开源的,提供了对多种编程语言的支持,而G++是GCC的一部分,专门用于C++的...
GCC和Clang是广泛使用的开源编译器,它们提供了丰富的编译选项,以帮助开发者检测代码中的各种潜在问题,提升代码质量和安全性。当开发者在编写和编译代码时,特别需要注意以下这些编译选项: `-Wall` 和 `-Wextra`...
"GCC使用指南"则是一份实践性的教程,它可能包含了一系列的实例和最佳实践,教导用户如何使用GCC编译简单的程序,如何处理编译错误,以及如何利用GCC进行多文件项目的构建。这有助于新接触GCC的开发者快速上手,并...
#### 六、不同的CPU下最佳编译参数 - 针对不同的CPU架构选择合适的编译参数非常重要,这可以显著提高程序性能。 - 例如,针对Intel Core i7处理器,可以使用`-mtune=core2`等选项。 #### 七、代码维护与自动化工具...
在了解 arm-linux-gcc 的命令参数之前,我们先简单回顾一下 GCC 的编译流程: 1. **预处理 (Pre-Processing)**:在这个阶段,源代码中的宏定义和文件包含会被展开。 2. **编译 (Compiling)**:预处理后的源代码被...
不同CPU下的最佳编译参数 - 针对不同的处理器架构,选择合适的编译参数可以显著提高程序的性能。 - 例如,对于x86_64架构,可以使用`-march=native`来自动选择最佳的编译选项。 #### 9. 代码维护 - **简单CVS**...
7. **语言特定指南**:为每种支持的语言提供特定的指南,包括语法、特性以及如何最佳地利用GCC编译这些语言的代码。 8. **移植性**:讨论如何在不同平台上使用GCC,以及如何编写可移植的代码。 **GCC使用教程.doc*...