Re: 答复: 答复: [cpp] 请问一下 如何判断一个8位数是否是有效日期
云风
cloudwu at gmail.com
Sun Oct 1 22:10:28 CST 2006
此回帖只针对缓存加载,和条件判断问题,不针对原算法到底是否优劣:
首先是片内一级 cache ,最古老的机器(又这个设计的)就有 8k 为数据服务了,现在的机器已经是 32k 以上了。
数据向这个 cache 加载是以 32 字节为单位的。
要使 1k 的表全部加载,最坏情况是需要查询三十多次。5 次是定然不够的。
如果真的是密集型数据校验。每组数据是 4 个字节,多余出来的 1
级缓存足够满足上万组数据使用了。因为这个任务还快不到内存的吞吐量的极限。所以在计算数据的时候,缓存已经可以被预读了。
"日期检查占掉的CPU时间只占总运行时间的一小部分。" 我不认为成立,毕竟,除法,判断这些的执行时间远高于加载 cache
。光一个除法的延迟,就足够好几次 cache 行的加载了。
其实更伤害性能是分支,用于分支的 BTB 随着 cpu 的发展越来越昂贵,这绝对是远超过 cache
的利用问题的。而一张简单的表可以消除不只一次的分支,这样一对比,要廉价的多。
在 06-10-1,Wu Yongwei<adah at sh163.net> 写道:
> 首先声明一下,我认为我的邮件中主要想说明两点:在不影响总体性能的情况下尽
> 量使用简单的算法(Keep it clean, keep it simple);对老孟的话"速度尽可能
> 的快,内存尽可能地耗"做一定的澄清。云风的算法会造成程序整体性能下降的可
> 能性不是我的重点。
>
> 纯粹从技术探讨的角度,设想一下以下的情况。日期是通过某种机制批量输入的,
> 在检查日期之前和之后,有大量的内存密集型操作,使得缓存基本处于被占满的状
> 态。在这些操作之间,有几个日期检查(假设五个左右),日期是分散的,使得这
> 1k内存的大部分被载入缓存中。日期检查占掉的CPU时间只占总运行时间的一小部分。
>
> 在极端情况下,这多出来的1k可能正好造成缓存失效,使得总体性能降低。
>
> 相信真正要构造出可测试的例子要困难些,因为和具体的处理器的缓存算法和缓存
> 大小有关。
>
> 吴咏炜
>
> 云风 wrote:
>
> > 就这 1k 内存问题探讨一下,
> > 如果只求几次结果,这 1k 内存不会全部进入 cache, 进入 cache 的部分只是查
> > 询的部分。如果程序要求是反复做此运算,这 1k 内存将非常有价值。
> >
> > 我暂时想不出,用这 1k 内存会在什么样的情况下造成负作用。大家可以特别构造
> > 一个情况出来举证。
> >
> > 在 06-9-26,Wu Yongwei<adah at sh163.net> 写道:
> >
> >> 云风的算法只占1K内存,确实不算多,在目前的测试代码中也不会出现什么缓存不
> >> 足的问题。但是,如果程序同时做了很多其它事情,那这1K就有可能造成缓存命中
> >> 率降低,并导致程序总体性能的下降。在没有特殊的性能要求(很难想象检查日期
> >> 的有效性会成为程序的瓶颈),及没有经过实际代码的测试之前,我不会使用云风
> >> 的方案。
>
> _______________________________________________
> Cpp mailing list
> Cpp at codingnow.com
> http://codingnow.com/mailman/listinfo/cpp
>
--
http://blog.codingnow.com
More information about the Cpp
mailing list