首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时大型性能从gcc 7.5.0-6 ubuntu2下降到gcc 8.4.0-3 ubuntu2

运行时大型性能从gcc 7.5.0-6 ubuntu2下降到gcc 8.4.0-3 ubuntu2
EN

Stack Overflow用户
提问于 2022-09-04 12:12:00
回答 1查看 104关注 0票数 1

在开始使用gcc 11 of Ubuntu 22.04之后,我注意到我的c应用程序性能下降了90%--这是我衡量它的方法。

缩小范围后,我看到了自gcc 8.4.0-3ubuntu2以来出现的退化。

现在我正在使用Ubuntu 22.04使用gcc-7gcc-8 (和gcc,也就是gcc 11)。

gcc-7编译完全相同的代码有很好的效果,而用gcc-8 (或gcc 11)编译会导致应用程序变慢。

我没有在gcc 8变中找到任何应该重要的更改。

我没有简单的申请。如果我有这意味着我已经知道这个问题的来源了。

有什么建议吗?

gcc 7.5gcc 8.4,有什么变化吗?

**编辑** -在gprof of old-fast (使用gcc-7)和new-slow (使用gcc-8)之后,我认为最有价值的事情是,在new-slow版本中有这样的条目,位于Flat profile的第二位

代码语言:javascript
复制
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
 39.27      9.83     9.83   173488     0.00     0.00  main_function
 22.89     15.56     5.73                             ...
 ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-07 13:37:57

那好吧,

情况就是这样:

出于某种原因,gcc-7并不关心它,但是自从gcc-8之后,它就成了一个问题。

如您所见,在main_function()堆栈上有一个大数组实例化。

sizeof(my_big_struct) -> 100

伪码:

代码语言:javascript
复制
void main_function() {
  my_big_struct bigstruct_arr[20000];
  ...
}
  • gcc-7运行时没有任何问题
  • gcc-8 (和11)也在运行,但速度确实很慢。我不知道为什么。分配的时间太多了?或者数组访问?

正如您从perf中看到的那样,它确切地说,main_funcion()是问题所在。

这有点误导,因为地址0x5594faaa3090承担了所有的错误。

我不明白这个地址是什么意思,直到我知道,这是数组bigstruct_arr

代码语言:javascript
复制
Samples: 36K of event 'cycles', Event count (approx.): 13441606624
  Children      Self  Command          Shared Object       Symbol
-   90.47%    88.88%  trd_1            my_process          [.] main_function
   + 88.26% 0x5594faaa3090
   + 1.60% main_function
     0.61% 0

当然,解决方案是用全局或malloc来定义它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73599291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档