根据自己的cpu写gcc优化编译参数

本文介绍了如何根据CPU类型为GCC配置优化参数,以提高编译效率和程序运行性能。包括CFLAGS、CXXFLAGS等参数的具体设置,并给出了适用于AMDAthlon IIX3 440处理器的-march=amdfam10参数。
根据自己的cpu写gcc优化编译参数
2009-05-06 11:04

CFLAGS="-march=core2 -O2 -pipe -msse4 -fomit-frame-pointer"   c优化参数   (-msse4 这个只针对 酷睿2 penryn 架构--而且需要gcc 4.3或者更高版本)如果gcc 版本低于 4.3用这个参数(-march=nocona) -O2 有很多人用 -O3 或者更高的,其实看看wiki感觉还是没太大作用,稳定优先。
CXXFLAGS="${CFLAGS}"                 c++优化参数
CHOST="x86_64-pc-linux-gnu"            64位架构
LDFLAGS="-Wl,-O1"                 当n>0时将会优化输出,但是会明显增加连接操作的时间
ACCEPT_KEYWORDS="~amd64"             这行应该在gentoo中常用,其它系统还不了解
MAKEOPTS="-j3"                    这个数一般比cpu个数+1

其他的可以到
http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
http://en.gentoo-wiki.com/wiki/Safe_Cflags/AMD

  


我的机子是AMD Athlon(tm) II X3 440 Processor

在gcc官网看到应该设置 -march=amdfam10



原文地址 http://hi.baidu.com/anywgchao/blog/item/546eed345ca5af46241f144e.html

<think> 我们正在讨论如何使用CMake控制GCC编译优化选项。根据引用[3],GCC优化选项包括-O0、-O1、-O2、-O3等。在CMake中,我们可以通过设置CMAKE_C_FLAGS(用于C)和CMAKE_CXX_FLAGS(用于C++)来添加这些选项。但是,更推荐使用`target_compile_options`或`add_compile_options`来设置。 另外,引用[1]提到,CMake可以获取编译器的版本(如通过CMAKE_C_COMPILER_VERSION),但我们这里主要关心优化选项。 方法如下: 1. **设置全局优化选项**:在CMakeLists.txt中,使用`add_compile_options`可以为所有后续的目标添加编译选项。例如: ```cmake add_compile_options(-O3) ``` 2. **针对特定目标设置优化选项**:使用`target_compile_options`可以为特定的目标(例如一个库或可执行文件)设置优化选项。例如: ```cmake add_executable(my_target main.c) target_compile_options(my_target PRIVATE -O2) ``` 3. **根据配置类型设置不同的优化级别**:CMake支持不同的构建类型(如Debug、Release等),我们可以根据不同的构建类型设置不同的优化选项。例如: ```cmake set(CMAKE_C_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_RELEASE "-O3") ``` 或者使用更现代的方式(推荐): ```cmake add_compile_options( "$<$<CONFIG:Release>:-O3>" "$<$<CONFIG:Debug>:-O0>" ) ``` 4. **允许用户选择优化级别**:我们可以提供一个选项让用户在配置时选择优化级别。例如: ```cmake set(OPTIMIZATION_LEVEL "O2" CACHE STRING "Optimization level: O0, O1, O2, O3, Os") add_compile_options(-${OPTIMIZATION_LEVEL}) ``` 5. **注意**:避免在同一个项目中混合使用不同优化级别的目标,除非有明确的理由。 6. **其他优化选项**:除了-O选项,还有一些特定的优化选项,如`-funroll-loops`等,可以通过类似的方式添加。 注意引用[2]中提到的,-O3会启用包括循环展开等更激进的优化,但可能会增加编译时间和代码大小,有时甚至可能导致程序行为变化。所以在添加优化选项时需要谨慎。 下面是一个完整的示例,展示如何在CMakeLists.txt中根据构建类型设置优化选项: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) # 设置默认构建类型为Release,如果用户没有指定 if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # 根据构建类型设置优化选项 add_compile_options( "$<$<CONFIG:Debug>:-O0>" "$<$<CONFIG:Release>:-O3>" "$<$<CONFIG:RelWithDebInfo>:-O2>" "$<$<CONFIG:MinSizeRel>:-Os>" ) # 添加可执行文件 add_executable(main main.cpp) ``` 在这个例子中,我们使用了生成器表达式(generator expressions)来根据不同的构建类型设置不同的优化选项。这样,当用户使用`-DCMAKE_BUILD_TYPE=Debug`时,会使用`-O0`;使用Release时,会使用`-O3`;RelWithDebInfo使用`-O2`;MinSizeRel使用`-Os`。 另外,我们也可以为特定编译器设置选项,例如只对GCC设置: ```cmake if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # GCC特定的优化选项 add_compile_options(-ftree-vectorize) endif() ``` 这样,我们就可以在CMake中灵活地控制GCC编译优化选项了。 §§相关问题§§ 1. CMake中如何为不同的编译器设置不同的优化选项? 2. 如何在CMake中同时支持Debug和Release两种构建类型? 3. 使用CMake时,如何避免不同目标之间的编译选项冲突? </think> ### 使用CMake控制GCC编译优化选项的方法 在CMake中控制GCC编译优化选项主要有以下几种方法,根据您的工程需求选择合适的方式: #### 1. **通过构建类型设置优化级别(推荐)** CMake预设了四种标准构建类型,每种类型自动关联不同的优化级别: ```cmake # CMakeLists.txt set(CMAKE_C_FLAGS_RELEASE "-O3") # C代码优化 set(CMAKE_CXX_FLAGS_RELEASE "-O3") # C++代码优化 # 使用示例 cmake -DCMAKE_BUILD_TYPE=Release .. # 命令行指定构建类型 ``` 优化级别对应关系: - `Debug`:`-O0 -g`(无优化+调试信息) - `Release`:`-O3 -DNDEBUG`(最高优化) - `RelWithDebInfo`:`-O2 -g`(平衡优化+调试) - `MinSizeRel`:`-Os`(最小代码体积优化)[^3] #### 2. **手动添加优化标志** 直接向编译选项变量添加优化参数: ```cmake # 全局设置(影响所有目标) add_compile_options("-O2" "-flto") # 启用-O2优化和链接时优化 # 针对特定目标设置 add_executable(my_app main.cpp) target_compile_options(my_app PRIVATE "-O3" "-march=native") ``` #### 3. **条件化优化配置** 根据编译器类型动态设置优化选项: ```cmake if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") # 仅对GCC生效的优化 add_compile_options("-funroll-loops" "-ftree-vectorize") endif() ``` #### 4. **SIMD指令优化** 启用处理器特定指令集加速(需硬件支持): ```cmake # 启用AVX2指令集 add_compile_options("-mavx2" "-mfma") # 自动检测本地CPU最佳指令集 add_compile_options("-march=native") ``` 注意:SIMD优化需要代码适配数据对齐和并行模式[^2] #### 5. **自定义优化选项变量** 创建用户可配置的选项: ```cmake # CMakeLists.txt set(OPT_LEVEL "O2" CACHE STRING "Optimization level (O0, O1, O2, O3, Os)") add_compile_options("-${OPT_LEVEL}") # 命令行使用示例 cmake -DOPT_LEVEL=O3 .. ``` #### 完整配置示例 ```cmake cmake_minimum_required(VERSION 3.10) project(OptimizedProject) # 编译器检查 if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU") message(WARNING "Optimizations tuned for GCC, current compiler: ${CMAKE_CXX_COMPILER_ID}") endif() # 默认优化配置 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") # 可选的激进优化 option(USE_AGGRESSIVE_OPT "Enable aggressive optimizations" OFF) if(USE_AGGRESSIVE_OPT) add_compile_options("-ffast-math" "-floop-unroll-and-jam") endif() add_executable(app main.cpp) ``` #### 验证优化效果 1. 检查实际使用的编译命令: ```bash cmake --build . --verbose ``` 2. 查看生成的编译指令是否包含预期的优化标志 3. 使用性能分析工具比较优化前后的执行效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值