[hellogcc] Re: [hellogcc] Re: [hellogcc] 请问下以下gcc -O0 和 -O1的代码运行时间不同的原因

  • From: Wei WU(吴伟) <wuwei.gucas@xxxxxxxxx>
  • To: 秦暕 <love.infly@xxxxxxxxx>
  • Date: Wed, 31 Jul 2013 09:26:16 +0800

Hi,

再向下我也不清楚了. Kito在上封邮件中说得比较详细, 或许可以顺着他提供的思路去挖掘一下.


在 2013年7月30日下午6:24,秦暕 <love.infly@xxxxxxxxx>写道:

> Hi,
>
> 我检查了下,将nanosec和sec相减运算的值分别打印了,手工比对和程序中的计算结果是一致的,没有出现整形溢出的问题。
> 前面的sec相减肯定不会溢出了都不会超过10,后面的nanosec是两个long的正数减法操作,按说也不会。
>
> 而且到后来每个循环时间都在1秒级别了,基本人已经可以感觉出来了,后面的时间没有2倍的递增,而是互相接近。
>
> 不知道为什么会有负数,可能是我没有用stdint里面的类型定义,移植性不足造成的?
>
> 或者确实程序有错误我没发现?
>
> 2013/7/30 Wei WU(吴伟) <wuwei.gucas@xxxxxxxxx>:
> > Hi,
> >
> >
> >
> >
> > 在 2013年7月30日上午11:30,秦暕 <love.infly@xxxxxxxxx>写道:
> >>
> >> Hi, 吴伟
> >>
> >>
> >>
> >>
> 对于你说的测试结果不一致,我又在自己电脑上做了一次。另外在别人的虚拟机上也简单测了下,和我的结果是一样的。以下是我在本机做的1000次的运行,这个貌似牵扯的比较多,从CPU型号到Gcc版本都会影响结果。
> >>
> >
> > 结果不一致也可能是我的机器太老旧了( T_T ):
> >
> > $cat /proc/cpuinfo
> > processor : 0
> > vendor_id : GenuineIntel
> > cpu family : 6
> > model : 15
> > model name : Intel(R) Pentium(R) Dual  CPU  T2370  @ 1.73GHz
> > stepping : 13
> > microcode : 0xa4
> > cpu MHz : 800.000
> > cache size : 1024 KB
> >
> >>
> >>
> >>
> >>
> 另,我还又用下面的相同循环数的代码分别用O0~3运行了几次,结果是K=128之前一直都是递增的,特别的是O1之后,明显的可以看出,初期的几个递增就是2倍递增,比O0的结果更加符合期望结果,数据如下,
> >> **为什么K=128后的时间下降了,我也不清楚原因。**
> >
> >
> > 会不会是长整形溢出? 我的(破)机器编译运行你在SO上的程序, 偶尔会输出来负数 :-)
> >
> >>
> >> 1, 60962944, 1
> >> 2, 121961343, 2
> >> 3, 248836377, 4
> >> 4, 478276479, 8
> >> 5, 961089972, 16
> >> 6, 1371127716, 32
> >> 7, 1851929390, 64
> >> 8, 964310614, 128
> >> 9, 994438045, 256
> >> 10, 1030341734, 512
> >> 11, 1124689492, 1024
> >
> >
> >
> > --
> > 吴伟/Wei Wu
> > wuwei.gucas@xxxxxxxxx
>



-- 
吴伟/Wei Wu
wuwei.gucas@xxxxxxxxx

Other related posts: