| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1787 人关注过本帖
标题:乱序优化与GCC 的Bug
只看楼主 加入收藏
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
结帖率:100%
收藏
 问题点数:0 回复次数:6 
乱序优化与GCC 的Bug
无意之间在网上看到的一篇好文章

1-2.pdf (136 KB)
搜索更多相关主题的帖子: gcc 乱序优化 bug 
2008-08-24 10:26
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
得分:0 
下来看看

MM: 给你讲一个小笑话吧
我: 多小,几KB的
我的blog:http://liujinxuan.blog./blog/edit/
2008-08-24 11:17
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
果然好文章。在GCC4.3@Ubuntu下重现了这个Bug……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-08-24 11:41
yt22534827
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-8-17
收藏
得分:0 
怎么下载了全是乱码啊?
2008-08-24 15:34
VxWorks2
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-7-30
收藏
得分:0 
这个BUG确实是因为inline函数引起的,但是我仍然不明白gcc为什么要把endpoint.udpPort_ = 0;
放到后面操作,这篇文章没有说清这种乱序是如何优化流水线的,而且文章中的反汇编像是作者修改后的,因为02级优化包含了延迟退栈,让人看着不爽。

这是我用O2优化后反汇编的结果:
 8048423:       8b 1d d0 96 04 08       mov    0x80496d0,%ebx     <--%ebx = endpoint
 8048429:       89 4d f8                mov    %ecx,-0x8(%ebp)
 804842c:       66 c7 05 d2 96 04 08    movw   $0x0,0x80496d2     <--($endpoint+2) = 0
 8048433:       00 00
 8048435:       89 1c 24                mov    %ebx,(%esp)
 8048438:       e8 b7 fe ff ff          call   80482f4 <srand@plt>
 804843d:       a1 d0 96 04 08          mov    0x80496d0,%eax
 8048442:       89 5c 24 04             mov    %ebx,0x4(%esp)
 8048446:       c7 04 24 34 85 04 08    movl   $0x8048534,(%esp)   <--format_string_addr
 804844d:       89 44 24 08             mov    %eax,0x8(%esp)
 8048451:       e8 ce fe ff ff          call   8048324 <printf@plt>

第三条指令movw   $0x0,0x80496d2就是乱序的结果,放到第一条前面结果就是对的,也不见得会中断流水线。

通常-O2是最有效的优化,-O3在-O2的基础上加入了循环展开和处理器相关优化,因为-O3还不成熟效率往往比-O2还要底。最好是在-O2的基础上使用选项-f{flag},-m{flag}自定义适合硬件结构的优化。找到一篇比较全面的文章:http://blog.

即使代码不出错编译器也可能出错,即使编译器不出错OS也可能出错,OS不出错时硬件可能出错,bug无穷尽。。。

吵架专用ID
2008-08-24 17:45
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
据说VC的inline也有这个问题,导致了release和debug版本可能出现不同...

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-08-24 19:50
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 6# 卧龙孔明 的帖子
我的一个VC工程代码中没有使用inline,也 导致了release和debug版本可能出现不同
2008-08-24 19:57
快速回复:乱序优化与GCC 的Bug
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019551 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved