答复: 答复: [cpp] 请问一下 如何判断一个8位数是否是有效日期
Wu Yongwei
adah at sh163.net
Thu Oct 12 19:56:15 CST 2006
云风 wrote:
> 此回帖只针对缓存加载,和条件判断问题,不针对原算法到底是否优劣:
>
> 首先是片内一级 cache ,最古老的机器(又这个设计的)就有 8k 为数据服务
> 了,现在的机器已经是 32k 以上了。
> 数据向这个 cache 加载是以 32 字节为单位的。
>
> 要使 1k 的表全部加载,最坏情况是需要查询三十多次。5 次是定然不够的。
有道理。这个是我没考虑周到。
> 如果真的是密集型数据校验。每组数据是 4 个字节,多余出来的 1
> 级缓存足够满足上万组数据使用了。因为这个任务还快不到内存的吞吐量的极限。
> 所以在计算数据的时候,缓存已经可以被预读了。
>
> "日期检查占掉的CPU时间只占总运行时间的一小部分。" 我不认为成立,毕竟,除
> 法,判断这些的执行时间远高于加载 cache
> 。光一个除法的延迟,就足够好几次 cache 行的加载了。
>
> 其实更伤害性能是分支,用于分支的 BTB 随着 cpu 的发展越来越昂贵,这绝对是
> 远超过 cache
> 的利用问题的。而一张简单的表可以消除不只一次的分支,这样一对比,要廉价的
> 多。
这些方面你有数据吗?我以前听说的是,一个除法约七十个时钟周期,但缓冲不命
中在最坏情况下可达数百个时钟周期的延迟。分支出问题的原因也是缓存不命中,
及流水线中断(对长流水线的P4影响最大);但目前的分支预测算法应该是越来越
好了,而且我印象里甚至可以同时预执行多个分支。但我手头没有进一步的资料。
吴咏炜
More information about the Cpp
mailing list