山,
快马加鞭未下鞍,
惊回首,
离天三尺三。
这是毛主席《十六字令三首》中的第一首,描述了骏马在崇山峻岭飞奔的场景。从今天开始,我们为大家介绍的就是计算机系统中的重要概念——存储器山,以及给大家讲述,计算机是如何在存储器山中飞奔的。
在前几期,我们提到,CPU在70年代演进到90年代的过程中,其数据位宽从8bit演进到了32bit甚至64bit,同时,可访问的内存与IO地址空间也从16bit(64KB)演进到了32bit(4GB),如下表:
CPU代数 | 数据位宽 (bit) | 地址位数 (bit) | 地址空间 |
---|---|---|---|
8051 | 8 | 16 | 64KB |
8086 | 8 | 20 | 1MB |
80286 | 16 | 24 | 16MB |
80386 | 32 | 32 | 4GB |
80486 | 32 | 32 | 4GB |
Pentium | 64 | 32 | 4GB |
在1995年以后,Pentium处理器又演进出了Pentium Pro, Pentium MMX, Pentium II/Celeron, Pentium III, Pentium 4等一系列更新换代的产品:
最早的奔腾,俗称“老奔”
奔腾MMX166黑金刚,初代超频大王,166MHz可以超到250MHz
Pentium Pro,很少见了,因为架构缺陷,跑16bit程序比486还慢,基本卖不出去
1997年9月份的电脑报上一篇文章:Pentium-II一举定乾坤,性能很棒,就是超级贵
精简了一部分Cache的Pentium-II,300MHz的能超到450甚至500MHz,性能飞起
Pentium3代正品,安装要小心,别把中间的die压碎了
Pentium 4处理器,由于架构缺陷 (流水线太长了),同等频率下还不如Pentium III快,被嘲笑
同时期的AMD也和Intel展开了比学赶帮超的竞赛:
K5-PR166,虽然主频实际上只有116MHz,但AMD认为它的性能比肩Pentium-166,因此标称为PR-166. (这样真的好吗)
AMD K6,这个家伙终于能跟Pentium MMX正面对抗了,可惜Pentium-II也出生了
K6-II和K6-III,对标Pentium-II和Pentium-III早期版本
Athlon,用铅笔超频的故事从这开始
duron,又一款超频王
当然还有Cyrix公司 (倒闭以后被威盛收购,卖给中国电子以后成了兆芯)
虽然不稳定,但超便宜呀!
我们发现,随着处理器的性能提升和内存的不断降价,出现了两个矛盾:
第一个矛盾是,内存的速度赶不上CPU的速度。
我们知道,SRAM内存的工作频率是和CPU相等的。但DRAM并非如此,其工作频率实际上和CPU是异步的。
以Pentium II时代流行的SDRAM (Synchrouous Dynamic Random Access Memory)为例。SDRAM的工作频率与CPU FSB相同,有66MHz,100MHz,133MHz等规格,与CPU规格的对照如下表:
CPU | FSB频率 (外频,MHz) | CPU频率 (主频,MHz) | 倍频数 |
---|---|---|---|
Celeron 300A | 66 | 300 | 5 |
Celeron 333 | 66 | 333 | 5.5 |
Pentium-II 350 | 100 | 350 | 3.5 |
Pentium-II 450 | 100 | 450 | 4.5 |
Pentium-III Coppermine 866 | 133 | 866 | 6.5 |
随着CPU技术的升级换代,CPU的倍频数(主频与FSB频率的比例)不断提升,也就是CPU运算频率与DRAM的存取频率的差距不断增加。雪上加霜的是,DRAM并不是在一个时钟周期内就可以读取或写入数据的!
在上期,我们提到,DRAM的读写,需要DRAM控制器 (北桥) 做以下几个动作:
在这个工作过程中,DRAM芯片并不能立即响应CPU的地址发送和数据读写,而是需要一定的间隔时间,如CL参数就代表了从1到2之间的周期。此外,由于DRAM芯片结构简单,每个bit只有一个晶体管和一个电容:
如图,电容中有电荷代表1,无电荷代表0。
而对这个bit的读取,会消耗掉电容的电荷,需要重新对电容充电,充电的时间也影响了DRAM的读写速度。
因此,DRAM的读写速率,一般比CPU的指令执行速率低2个数量级。以Intel 8360H处理器为例,其基准频率为3.00GHz,每条指令的周期为0.33ns。8360H采用3200MHz的DDR4 DRAM,其数据传输频率为3200MHz,工作频率1600MHz,周期为0.625ns。(DDR时钟上下沿都可以传输数据)。如时序为20-20-20,CAS为12.5ns,理论上从内存中读取一个word(64bit,8 Byte)最快也需要等待50ns,相当于150条指令的执行周期!
那么,有没有变通的方法呢?
计算机科学家们想到,SRAM虽然成本高,但工作速率大大高于DRAM,那么,在CPU中集成少部分的SRAM,把最常用的内容放在SRAM中,是不是可以加速计算机内存子系统的访问呢?
因此,从386处理器开始,CPU内部就引入了这一机制,叫Cache。在486中,又对Cache做了分级,分为L1 Cache和L2 Cache。到了Pentium-III以后,Cache分为L1 Cache,L2 Cache和L3 Cache三级,其中L1 Cache的工作速率与CPU完全同步,L2 Cache在速率与容量之间折中,而L3 Cache的工作频率与FSB同步,容量更大。
这样,CPU寄存器,缓存,RAM及外部存储,就构成了一个金字塔型:
这个图中,越接近金字塔顶端的层级,其速度越快,但单位容量成本也越高,容量越小,反之,越接近金字塔的底层,其速度越慢,成本也越低。
那么,这就是所谓的存储器山吗?
并不是。
本期结束之前,为大家再次讲述一个故事:
方老师的朋友X姐,晋升P9以后,有人带她去白马女子私密会所庆祝,X姐点了一位6666号小哥哥,非常满意。此后,每次X姐再光顾这家私密会所,都优先点这位6666号小哥哥。
与此同时,X姐每次从私密会所出来,总是要去隔壁的点都德喝早茶。
在计算机科学中,第一种行为就叫时间局部性:刚刚被访问过的数据,再被访问到的可能性显著高于其他数据。
而第二种行为叫空间局部性:刚刚被访问过的数据,邻接的数据再被访问的可能性,也显著高于其他数据。
时间局部性和空间局部性是计算机缓存工作的基本原理,方老师在这里编这个故事是为了让大家记住。
大家下期见。