从 g++/gcc 3.2.3 到 4.2.4 的性能改进

     2023-02-18     233

关键词:

【中文标题】从 g++/gcc 3.2.3 到 4.2.4 的性能改进【英文标题】:Performance improvements moving from g++/gcc 3.2.3 to 4.2.4 【发布时间】:2010-09-12 07:17:12 【问题描述】:

我们一直在研究 g++ 版本 3.2.3 和 4.2.4。在 4.2.4 中,我们的一些代码库的性能改进非常显着。

我已尝试搜索 gcc buzilla database 以查找有关哪些错误可能有如此显着改进的提示,但我没有找到任何作为候选者脱颖而出的单独错误。

这些改进是由许多慢慢产生影响的小改动的结果吗?或者是否有前 5 项改进可能会有所作为?

在某些背景下,我们的代码库确实很好地利用了 STL 容器和算法,以及诸如“inline”关键字之类的 C++ 特性。

【问题讨论】:

【参考方案1】:

根据我的经验,3.4 是性能基本达到顶峰的地方;在我的项目中,4.2 实际上比 3.4 慢,4.3 是第一个大致等于 3.4 性能的版本。 4.4 比 3.4 稍快。

我发现了一些特定的情况,旧版本的 gcc 在代码中做了一些令人难以置信的延迟事情——从 3.4 到 4.3,有一个特定的函数从 128 到 21 个时钟,但这显然是一个特殊的案例(这是一个短循环,仅添加一些不必要的指令会严重影响性能)。

我个人使用 3.4 只是因为它的编译速度快得多,测试也快得多。我也尽量避免使用最新版本,因为它们似乎有错误编译代码的讨厌习惯;最近 gcc 版本上的 --march core2 会导致我的程序出现段错误,例如,因为它会发出自动向量化代码,试图对未对齐的地址执行对齐访问。

总体而言,尽管差异很少很大;就性能变化而言,3-5% 是我见过的绝对最多

现在,请注意这是 C; C++ 中的情况可能有所不同。

【讨论】:

我们的一些代码库的改进不止于此。至少在一种情况下,情况有了很大改善,我们花了很长时间才高兴地发现编译器中没有导致崩溃的错误。 也许我的项目中的变化不大,这既是因为它广泛使用了手写汇编,而且我们在寻找编译器悲观的地方并修复它们方面付出了很多努力(主要是通过修改代码来诱使编译器获得更优化的输出)。【参考方案2】:

我相信优化器在 gcc4 系列中已经完全重新设计。例如,请参阅此页面关于矢量化:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

关于信息,我曾经用动态数组、静态数组和 std::vector 做了一个 c[i] = a[i] + b[i] 的基准测试,它是最快的 std::vector (带 gcc 4.1)。性能差异 30%。

【讨论】:

【参考方案3】:

流在 3.3 中非常慢,而在 3.4 中变得更快。 (message on gcc mailing list) 我敢打赌其他方面也有所改善。

【讨论】:

动态规划之背包(代码片段)

...。但是可以发现之前穷举的表格是可以压缩的。因为观察到(1+2=3),(1+3=4),(cdots),每次只记录和的值。我们可以发现,通常这类题目中会存在一个至关重要的条件:(sum_ia_i≤5 imes10^4,n≤100),所以最多只存在(5 imes10^6)的计算量,... 查看详情

python打印九九乘法表(正三角格式输出)(代码片段)

Python打印九九乘法表(正三角格式输出)#循环从1到10,不包含10,即123456789foriinrange(1,10):#第一个乘数从1开始到9forjinrange(1,i+1):#之所以将j放到前面是为了乘法表输出乘法表的可读性(第一个乘数是较小的数),... 查看详情

linux应用开发第四章linux进程间通信应用开发(代码片段)

文章目录4Linux进程间通信应用开发4.1初识进程4.1.1进程的概念4.1.1.1程序4.1.1.2进程4.1.1.3进程和程序的联系4.1.1.4进程和程序的区别4.1.2进程的操作(创建、结束、回收)4.1.2.1创建进程4.1.2.2结束进程4.1.2.3回收进程4.2进程为什... 查看详情

docker我是真的全(没骗人[三万字巨详细])--docker虚拟机安装部署及常规操作

...装Docker4.2.6启动docker4.2.7设置开机启动4.2.8将指定用户添加到用户组4.2.9安装后查看Docker版本4.3Docker启动和停止4.4配置阿里云镜像加速5.Docker常用命令5.1帮助命令5.2镜像命令5.2.1搜索镜像5.2.2 查看详情

计算机网络期末复习(已完结)

目录第一章概述1.1计算机网络在信息时代的作用1.2互联网概述1.3互联网的组成1.5计算机网络的类别1.5.2几种不同类别的计算机网络1.6计算机网络的性能1.6.1计算机网络的性能指标1.6.2计算机网络的非性能特征1.7计算机网络体系结构... 查看详情

计算机网络期末复习(已完结)

目录第一章概述1.1计算机网络在信息时代的作用1.2互联网概述1.3互联网的组成1.5计算机网络的类别1.5.2几种不同类别的计算机网络1.6计算机网络的性能1.6.1计算机网络的性能指标1.6.2计算机网络的非性能特征1.7计算机网络体系结构... 查看详情

计算(1/2+1/3+...+1/20)+(2/3+2/4+...+2/20)+(3/4+3/5+...+3/20)+...+(18/19+18/20)+19/20等于多少

计算(1/2+1/3+...+1/20)+(2/3+2/4+...+2/20)+(3/4+3/5+...+3/20)+...+(18/19+18/20)+19/20等于多少? =1/2+(1/3+2/3)+(1/4+2/4+3/4)+(1/5+2/5+3/5+4/5)+...+(1/20+2/20+3/20+...+19/20)=1/2+1+3/2+2+5/2+3+7/2+4+9/2+5 查看详情

基于python班级管理系统毕业设计-附源码171809

目 录摘要1绪论1.1研究背景1.2研究的目的与意义1.3系统开发技术的特色1.4论文结构与章节安排2 基于Python班级管理系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.3.2数据修改流程2.3.3数据删除流程2.3系统功能分析2.3... 查看详情

(附源码)springboot流浪动物救助系统毕业设计180920

...4.2.3内容模块界面4.2.4模块管理界面5系统测试5.1系统测试的目的5.2系统测试用例5.3系统测试结果结论参考文献致  谢摘要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次... 查看详情

(附源码)springboot毕业论文管理系统毕业设计030946

目 录摘要1绪论1.1选题的目的及意义1.2国内外研究现状及发展趋势1.3系统开发技术的特色1.4论文结构与章节安排2毕业论文管理系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.3.2数据修改流程2.3.3数据删除流程2.3系统功... 查看详情

考研数据结构与算法线性表(代码片段)

文章目录一、线性表定义二、线性表基本操作三、线性表的顺序表示3.1顺序表特点3.2操作实现3.2.1插入操作3.2.2删除操作3.2.3查找操作3.3顺序表合并四、线性表的链式表示4.1链式表特点4.2操作实现4.2.1下标找值4.2.2按值查找4.2.3头部... 查看详情

二重循环

打印九九乘法表1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 查看详情

unity场景内模型出现粉色的处理方法

Unity场景内模型出现粉色的处理方法Unity场景内出现粉色Shader的处理方法0丢失材质或者渲染文件丢失表现1查看Shader类型1.1查看后是URP的Shader2查看是否安装对应的管线:2.1内置管线包2.2URP包2.3HDRP的包3检查质量设置3.1查看渲染... 查看详情

1^5+2^5+3^5+.+n^5及任意次方求和

数列求和(1).1^4+2^4+3^4+.+n^4(2).1^5+2^5+3^5+.+n^5以下证明利用到:1^2+2^2+3^2+……+n^2=n(n+1)(2n+1)/6和1^3+2^3+3^3+……+n^3=[n(n+1)/2]^2;证明:(1)2^5=(1+1)^5=1^5+5×1^4+10×1^3+10×1^2+5×1^1+13^5=(2+1)^5=2^5+5×2^4+10×2^3+10×2^2+5×2^1+1……(n+1)^5=n^5+5×n^4+10×n^3+1... 查看详情

用 NaN 替换矩阵的某些元素(MATLAB)

】用NaN替换矩阵的某些元素(MATLAB)【英文标题】:ReplacecertainelementsofmatrixwithNaN(MATLAB)【发布时间】:2013-09-2521:06:08【问题描述】:我有一个向量,A。A=[3,4,5,2,2,4;2,3,4,5,3,4;2,4,3,2,3,1;1,2,3,2,3,4]A中的某些记录必须替换为NaN值,因为... 查看详情

如何在 C# 中对二维数组进行排序?

...然后是第三个元素对数组进行排序,依此类推。对于给定的输入,我想要这样的输出2,1,2,4,3,1,3,2,3,4,4,2,4,9,7,2我试过下面的代码sn-p:C 查看详情

利用dfs解决太平洋大西洋水流问题(代码片段)

...雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。  返回网格坐标result的2D列表,其中result[i]=[ri,ci]表示雨水从单元格(ri,ci)流动既可流向太平洋也可流向大西洋。示例1:输... 查看详情

编译原理lr语法分析器的设计与实现(代码片段)

LR语法分析器的设计与实现本文为当时编译原理实验作业,要求用设计的思想完成,小题大做,仅供参考文章目录LR语法分析器的设计与实现实验要求实现功能输入输出样例一、LR语法分析器问题定义1.1语法分析器定义... 查看详情