| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 332 人关注过本帖
标题:乱序优化与GCC 的Bug
收藏  订阅  推荐  打印 
lingluoz
Rank: 4
来自:苏州科技学院
等级:高级会员
威望:3
帖子:623
积分:6680
注册:2008-2-2
乱序优化与GCC 的Bug

无意之间在网上看到的一篇好文章
附件: 只有本站会员才能下载或查看附件,请您 登录注册
搜索更多相关主题的帖子: gcc  乱序优化  bug  
2008-8-24 10:26
xuanzilie
Rank: 2
等级:注册会员
帖子:133
积分:1628
注册:2007-7-12

下来看看

MM: 给你讲一个小笑话吧
我: 多小,几KB的
我的blog:http://liujinxuan.blog.163.com/blog/edit/
2008-8-24 11:17
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

果然好文章。在GCC4.3@Ubuntu下重现了这个Bug……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-8-24 11:41
yt22534827
Rank: 1
等级:新手上路
帖子:13
积分:242
注册:2008-8-17

怎么下载了全是乱码啊?
2008-8-24 15:34
VxWorks2
Rank: 1
等级:新手上路
帖子:7
积分:182
注册:2008-7-30

这个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.programfan.com/article.asp?id=7998

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

吵架专用ID
2008-8-24 17:45
卧龙孔明
Rank: 12Rank: 12Rank: 12
等级:版主
威望:47
帖子:3708
积分:39126
注册:2006-10-13

据说VC的inline也有这个问题,导致了release和debug版本可能出现不同...

为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!
2008-8-24 19:50
vfdff
Rank: 6Rank: 6
等级:金牌会员
威望:5
帖子:1218
积分:13543
注册:2005-7-15
回复 6# 卧龙孔明 的帖子

我的一个VC工程代码中没有使用inline,也 导致了release和debug版本可能出现不同
2008-8-24 19:57
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050113 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved