Re: Re: 答复: 答复: [cpp] 请问一下 如何判断一个8位数是否是有效日期

李慧霸 magazine.lihuiba at 163.com
Sun Oct 15 14:09:00 CST 2006


>整数除法的问题是这样的,各个阶段设计的 cpu
>都不太一样。不过从发展历史上来看,是越来越昂贵的。现在的流水线设计已经不能单单以一个延迟时间来参考了。一般说来需要考虑基本的延迟时间,切
>换运算单元的延迟时间,和重复使用同一个运算子单元的延迟时间。除法在这里不会造成切换运算单元的延迟。如果我们的除法运算不密集的话,第3个延迟也可以避免(在
>P4 上是 20 多个,在 Pentium D 上是 30 多个)。基本延迟时间一般在 P4 上是 50~60,Pentium D 上是
>70~80 )不过到了 Pentium Core Duo 和 Core 2 以后又降了下来,只要 20~30 了。

>分支预测的效率问题主要集中在预测失败。(通常处理循环时,几乎不会失败,所以效率比较高。如果是数学运算,这个问题会突出一些) 早期的 P4
>系列,有一个很大的 BTB (8 ways * 512 sets) ,不过分支流水线不能被 cancel,
>一旦失败惩罚非常严重。在处理高延迟的指令中,尤其如此,超过 100 个周期的延迟并不稀少。通常也会保持在 50 个周期左右。而且不可能少于
>24 个。


云风一直都在强调 除法问题 和 分支预测问题。诚然,这两个者都会显著影响性能,但云风的分析一直都误入歧途。原因有以下几点:
1。在实际系统中,参数验证往往是在比较接近UI的代码层进行的,此时输入参数一般都是字符串,如&# 8220;20060930&# 8221;。此时使用的乘法可以用位移代替(x*10== x*2+x*8),不存在除法问题。
2。即便风云的算法也需要判断闰年,这个同样会引起分支。
3。这个一个小小的程序段,无论采用何种算法其执行开销基本上都可以不用太在意,有更多更复杂更重要的地方需要我们去优化。这是最误入歧途的一条,它引导大家捡芝麻丢西瓜。

此外还有一点不好分析:如果其算法多引起一次page fault,什么cache啊、btb啊、预测啊没有用处,好处都被抵消了(甚至可能更糟)。

------------------				 
李慧霸
2006-10-15





More information about the Cpp mailing list