现代处理器架构
所有的经典的关于性能的建议或算法大多来源于早期CPU时代,那是处理器和内存的速度基本相同。但那之后处理器的速度以摩尔定律的每年60%的速度爆发式的增长,而内存的访问速度每年只增长10%,不足以匹配CPU的速度。问题的症结在于主存(动态随机访问存储器DRAM)包含着极小的电容,保持电荷时表示比特“1”,没有电荷时表示比特“0”。这样做的好处是电路成本低,没有必要一直保持电压,但这种机制是基于模拟电路,无法从数字器件的巨大进步中受益。
自那之后的第二个变化是摩尔定律简单形式的终结。2000年前后CPU制造商不断提升CPU频率,让CPU越来越快。这是通过增加芯片上的晶体管数量实现的,摩尔定律预言,芯片上的晶体管数量将每18个月翻倍,简言之,CPU的速度每两年倍增。
这一趋势会一直延续到处理器制造商达到物理极限,即所谓的功率极限(power wall), 当密集的晶体管产生了大量的热以至于不能用消费级技术进行有效地冷却(高端昂贵的水冷系统对桌面、移动设备而言成本太高了)。所以必须找到一种新的提升CPU性能的方法。
缓存
为克服以上问题的尝试产生了计算机架构上的创新。首先,CPU与内存速度的不匹配通过一种我们已知的传统优化技术来解决,即在芯片级别增加缓存。这种芯片上的静态随机存储器(SRAM)每个比特需要6个晶体管(构成触发器),并且所有晶体管都需要供电。这意味着这是一种昂贵的方案,并且会导致功耗的增长(必须小心地避免达到功率极限)。带来地好处是:内存地访问速度接近光速,因为是通过电流进行输入和输出操作。
所以,这一思想便是在CPU和慢而便宜的大容量主存之间增加少量昂贵但快速的片上内存作为缓存。同时,现代CPU可以寻址多达三级的缓存,通常缩写为L1, L2和L3, 这三级缓存的的晶体管密度和速度逐级递减,但容量逐级递增。下图展示了现代CPU的层级存储结构:
Fig.1 CPU, 主存,缓存示意图在本书写作时,L1缓存的访问时间是3个时钟周期,L2为12个时钟周期,L3为38个时钟周期,而主存的访问时间大约是100到300个时钟周期。主存的高访问延时主要是由DRAM的模拟本质决定的。除此之外还有周期性的充电刷新,读取前对读取行的预充电,模拟-数字转换,与存储器控制单元(MCU)的通信等,诸如此类。
缓存由缓存行构成,在当今Intel架构下,每个缓存行为64字节长度。每次缓存更新会从主存中读取整个缓存行,这是以缓存行的大小做数据预取。说到数据预取,Intel处理器有一种特殊的预取指令,我们可以用汇编代码调用,做非常底层的优化。
除了数据缓存,还有一种指令缓存,在冯·诺伊曼体系中,这两者都在通用存储器(common memory)中。指令缓存是在Intel Pentium Pro (P6)尝试增加的,但那之后就一直保留了下来。
网友评论