第一章 有关Cache的思考


在现代处理器系统中,Cache Memory处于Memory Hierarchy的最顶端,其下是主存储器和外部存储 器。在一个现代处理器系统中,Cache通常由多个层次组成,L1,L2和L3 Cache。CPU进行数据访问将通过各级Cache后到达主存储器。如果CPU所访问的数据在Cache中命中,将不会访问主存储器,以缩短访问延时。

工艺的提高,使得主存储器的访问延时在持续缩短,访问带宽也在进一步的提高,但是依然无法与CPU的主频,内部总线的访问延时和带宽匹配。主存储器是一个不争气的孩子,不是如人们期望那般越来越快,是越变越胖。 主存储器膨胀的形体对Cache Memory提出了更高的要求,也进一步降低了主存储器所提供的带宽与访问延时之间的比率。近些年,单端信号所提供的数据传送带宽受到了各种制约,使得差分信号闪亮登场。差分信号的使用却进一步扩大了访问延时,对于这种现象,理论派亦无能为力,只是简单规定了一个公式1‑1,这只是一个无奈的选择。 第1章 <wbr>有关Cache的思考
从以上公式可以发现,延时在以平方增长,而带宽以线性增长。可以预计在不远的将来,CPU访问主存储器的相对访问延时将进一步扩大,这是主存储器发展至今的现状,这使得在处理器设计时需要使用效率更高的Cache Memory系统去掩盖这些Latency,也使得Cache Memory需要使用更多的层次结构以提高处理器的执行效率。在现代处理器中,一个任务的执行时间通常由两部分组成,CPU运行时间和存储器访问延时,如公式1‑2所示。
在一个处理器系统中,影响CPU运行时间的因素很多,即便是几千页的书籍也未必能够清晰地对其进行阐述。但是即便在一个可以容纳几千条指令的并行执行的CPU流水线中,采用更多提高ILP(Instruction-Level Parallelism)的策略去进一步缩短CPU的运行时间,这些指令也必会因为存储器的访问延时被迫等待。 这使得如何缩短存储器访问时间受到更多的关注,合理使用Cache是降低存储器访问时间的有效途径。根据统计结果,在处理器执行一项任务时,在一段时间内通常会多次访问某段数据。这些任务通常具有时间局部性(Temporal Locality)和空间局部性(Spatial Locality)的特征,这使得Cache的引入顺理成章。这种局部性并不是程序天生具有的特性,是一个精心策划的结果。我们不排除有些蹩脚的程序时常对这两个Locality发起挑战。对于这样的程序,处理器微架构即便能够更加合理地安排Cache层次结构,使用更大的Cache也没有意义。 在一个任务的执行过程中,即便是同一条存储器指令在访问存储器时也可能会出现Cache Hit和Cache Miss两种情况。精确计算一个任务的每一次存储器访问时间是一件难以完成的任务,于是更多的人关注存储器平均访问时间AMAT(Average Memory Access Time),如公式1‑3所示。
第1章 <wbr>有关Cache的思考
从公式1‑3可以发现在一个处理器系统中,AMAT的计算也许并不困难,只需要能够确定Hit time,Miss Rate和Miss Penalty这三个参数即可。但是如何才能才能确定这三个参数。 在一个程序的执行过程中,精确计算Hit time,Miss Rate和Miss Penalty这三个参数并不容易,即便将计算这些参数所需的环境进行了一轮又一轮的约束。近些年,我在面试一些Candidates的时候,通常只问他们一个问题,让他们简单描述,在任何一个他所熟悉的处理器中,一条存储器读写指令的执行全过程。我很清楚在短暂的面试时间内没有任何一个人能够说清楚这个问题,即便这个Candidate已经获得了处理器体系结构方向的博士学位。 我所失望的是参加面试的学生几乎全部忘记了这些可能在课堂上学过的,可能会使他们受益终身的基础内容。参加面试的学生们更多的是在其并不算长的硕士博士学习阶段,研究如何提高编程能力,和一些与操作系统具体实现相关的技巧。这些并不是学生们的错,有太多的评审官们本身就仅专注于小的技术和所谓的编程能力。 这些具体的编程能力和技巧,本不是一个学生应该在学校中练习的。在弥足珍贵的青春岁月中,学会的这些小技巧越多,这个学生在整个技术生涯中的Potential可能越低。重剑无锋,大巧不公。泱泱大国最为缺少的,不是能够书写程序,实现各类技巧的工程师。

原文链接:http://blog.sina.com.cn/s/blog_6472c4cc0102dusx.html

results matching ""

    No results matching ""