4.1 Cache层次结构的引入

我经常尝试一些方法,试图去解决在存储器子系统存在的瓶颈问题,总会陷入长考。在我们所处的这个领域,这个时代,在不断涌现出一些新的变化。这些变化会我们之前历千辛万苦学得一些知识和理念荡然无存。这些变化不会依赖你的喜好而改变。

1975年,Moor将其定律修正为“晶体管的数目每18月增加一倍,性能也将提高一倍”。这个定律在维持了相当长一段时间的正确性之后逐步失效。首先体现在性能提高一倍上,使用过多核编程的人不敢轻易地说用3个处理器一定能到达单处理器乘2的效果,不用说2个核。更多的领域和应用证明并正在不断证明“18个月性能提高一倍”不断着发生错误。

晶体管的数目每18个月增加1倍也遭到了前所未有的挑战。IntelTick-Tick计划努力维护着摩尔定律最后的领地,也无法改变最后结果。从已知的几乎全部领域看,技术的发展是初期爆发而后逐步平缓,从更长的时间段上分析将呈对数增长。摩尔定律不会例外只会在一段时期适用。这段时光将是属于Intel和半导体界最美好的岁月。

在不远的将来,相同的Die所容纳的晶体管数目将是有限的。在时光飞舞中,这个将来距离我们这个年代很近,因为永远尚不足够遥远。摩尔定律的失效近在咫尺,这个失效率先对目前云集在处理器领域的人群产生影响。

传统意义的多核时代已经逐步结束。在半导体技术所依赖的基础领域发生重大的更新与变革之前,使用更多的晶体管资源扩大处理器数量并不可取。在设计多核处理器公司中工作的一些朋友经常和我提起,今年或者明年他们就可以集成更多的处理器内核向Intel发起挑战。我想和他们说以相同的DieIntel可以集成更多那样的处理器内核,集成256512或者更多的处理器内核对Intel都不是太大的难题。只是不知这样做的目的何在,很多应用甚至无法发挥4个或者8个内核的性能。

即便不谈这些性能问题,我们讨论功耗问题。有很多许多工程师在这个领域中孜孜以求,默默耕耘着,针对功耗进行各类优化。很多工程师在做这件事情时,忽略了一些在其他领域中的基本常识,甚至是能量守恒定律。

忽略这些常识的结果是所做努力最后灰飞烟灭。在处理器领域,完成一件事情可能由多个任务组成,各类降低功耗手段的出发点是在完成这件事情时,统筹考虑多个任务的执行过程,避免重复性的工作。

从这个角度上看,微架构在Misprediction时,产生的重复执行操作是最大的功耗来源,还有在多个任务执行过程中,与当前任务执行无关的功能部件的开启等,这些都是具体的优化细节。围绕着处理器功耗优化,有许多需要作出努力的工作细节,需要更多的人来参与。只是再多的人也注定不够。截止到今天,处理器设计的出发点还是为了能够解决更多的应用,希望拥有更多Feature来怀抱天下。

这种设计思路从处理器诞生的第一天开始,那个年代距今已经较为遥远。处理器及其相关应用领域的发展与革新是二战之后人类文明进步重要的源推动力。其他领域在可望不可及过程中产生的无限向往,使得几乎剩余的所有应用迅速向这一领域靠拢。也因此产生了通用处理器,使处理器更加聪明,更加通用。

处理器系统正是这样逐步通用化。Intel是产生这种通用处理器的最典型和最庞大的厂商。而目前发生和正在发生的诸多事实表明这种通用化已经举步维艰,诸如Memory Wall,功耗居高不下这样的问题已经触及通用处理器是否能够继续发展的底线。

越来越多的领域提出了应用为王这样的口号,本质上这是一个使处理器不再继续通用的口号。更多的领域需要属于自己的定制,不再完全继续依托通用处理器。在这些领域,通用处理器仅作为一个基本组成模块,更多的是适合这个领域的定制逻辑。

处理器领域在经历了爆发式增长,快速增长后回归自然,使得处理器不再神秘,使得一些电子类产品的使用习惯正在进一步回归。苹果近期辉煌源自于此。Jobs再次来到苹果后只做了一件事情,使MP3更像MP3,电话更像电话,平板更像平板。苹果的成功在于Jobs使一个没有受到这些来自处理器领域的专业或者半专业人的影响之下,正常的使用这些设备。这不是创新,是回归自然。任何人,任何群体,任何公司都无法阻挡这股天然的力量。

在此之前,任何一款电子类产品都自觉或者不自觉的受到了来自处理器领域的影响。许多设备,甚至是许多嵌入式设备亦无法幸免。原本就应该属于应用领域的设计并没有按照自身领域的特点设计,被来自通用处理器领域的想法左右。在过去的岁月中,那片领域曾经多次证明引入通用处理器观点后获得了巨大的成功。这种成功在某种程度上桎梏了观念,使更多的人容易忘记在应用领域中所真正应该的关注。

这些固有的观念无法阻挡专用化时代的脚步。专用化和定制化已经出现在通用处理器领域中,比如在加密算法实现领域使用的专用引擎,用于图像处理的GPU等等。近期会出现更多的加速引擎,会进一步弱化通用处理器。可以说这种专用化和定制化时代已经来临,通用处理器所覆盖的范围会越来越小。

从这个角度上说,Intel之忧不在功耗性能比没有超过ARMCortex系列处理器,而是离通用处理器日益远去的各类应用,继续坚持使用更加通用的处理器,以包含更多的应用会遭遇比Memory Wall更加牢不可破的Wall,迎接几乎必败的格局。如果ARM架构不是进一步为应用预留空间,去采用通用方法去左右这些应用,通用处理器所面临的困境将如期而至。

在通用处理器领域中,ARM架构的成功是一个莫大的讽刺。在其成功背后,最主要的原因是在使用ARM的许多应用中,ARM微架构不是如想象中那样重要。我们可以简单列举出在使用ARM构架中最伟大的几类电子产品,其中哪怕有一个是因为单纯使用ARM架构而伟大。ARM公司的高明之处是轻架构而重应用,由环绕其总线组成的Ecosystem势不可挡,率先开启了专用化时代,ARM微架构不过是一个载体。

进一步定制化不意味着通用处理器将很快退出历史舞台。对于某类应用,定制辅以通用处理器的组合将长期存在,这种场景之下,定制的与应用紧密结合的部分成为主角。较为理想的情况是95%的定制与5%的通用处理器。这有助于解决存储器Wall和功耗问题。在这种情况下,处理器将不会频繁访问主存储器,即使访问也是在5%的基础上,也不用担心功耗问题,因为只有5%的权重。

这样的结果是不是将全部负担转移到了定制化部分。不用为此做太多担心,我反对使用通用处理器所做的某些应用,是基于处理器过于通用而产生了过多的不需要的存储器访问,引入了并不需要的功耗。贴近应用的定制无法做到不进行数据传递,也无法避免不消耗能量,但是能够将这种影响限制到最小的范围之内。附着在处理器系统上的操作系统,也会因为这些变化而改变。从通用性的角度上看,x86处理器和Windows操作属于一类产品,只是一个在处理器领域,一个在操作系统领域。这两个产品处于同一个困境中。

在不久的将来也许会出现适用于通用部分的操作系统,这个操作系统与传统操作系统,如WindowsLinux,这些操作系统所做的工作较为类似,却在不断弱化,Linux进入到2.6内核之后,再无实质变化,这是通用操作系统所面临的同一个问题。另一个部分操作系统将与定制相关,也被称为应用类操作系统,这些操作系统将有很多种类。

有人会问,既然你认为定制化的时代已经开启,为什么花如此气力在通用处理器的Cache中。因为他山之石可以攻玉。通用处理器的发展借鉴了很多领域的精华,在定制即将兴起的时代,不能忽略通用处理器的核心。定制化领域依然会从狭义广义Cache的设计思想中受益。Cache的核心是数据缓冲组织结构,通路连接方法,管理策略和各类算法,这些内容较为基础。世间万物,千变万变,基础内容的变化较为缓慢。

使用定制会缓解通用处理器做遇到的各类瓶颈,而不是消除。主存储器的容量和延时的不断增加依然是客观存在的事实。通用处理器领域的解决方法是引入更多级别的Cache。多核处理器的进一步发展使得多级Cache间的组成结构异常复杂。

在单处理器系统中,CacheMemory由多个层次组成。这些层次相互关联,相互依托,而为参天大树。底部由主存储器与外部存储器组成庞大的根系,其上由各类Cache和各类用于连接的Buffer,形成茂密的枝干。这些参天大树更通过各种类型的网络,或松或紧连接在一起,若小为林,夫广为森,煌煌立于天地,善能用之,攻坚强者莫之能胜。在一个ccNUMA处理器系统中,典型的Cache Memory层次结构如41所示。

4.1 <wbr>Cache层次结构的引入

不断增加的主存储器容量需要更大的Cache减少Miss Rate,使用一个很大的L1 Cache无法胜任这个工作,主存储器不仅在变大,访问延时也在逐步提高,进一步加大了指令流水线间的差距。单独一级Cache无法掩盖这个差距。提高Cache的访问延时与进一步扩大容量是一个Trade-Off。而且Cache容量越大,其访问延时也越大。

这些现状使得在现代处理器系统中引入多级Cache成为必然。在没有从根本上解决存储器子系统存在的这些问题时,Cache级数会逐步提高,目前大多数中高端处理器都已经包含了L3 cache,大规模地使用L4 Cache并非遥不可及。

CacheMemory层次结构的最顶端为微架构中包含的系统寄存器和各类Buffer,如与Data Cache连接的LSQ和与Instruction Cache连接的I-Cache Line Filling部件中的BufferFLC(First-Level Cache)指与微架构直接进行连接的Cache。在许多微架构中,FLCL1 Cache,而在有些微架构中,在L1 Cache之上,存在一级L0 Cache,此时这个L0 Cache即为FLC

LLC指在处理器系统中与主存储器直接相连的Cache。在不同的处理器系统中,LLC所指对象迥异,有的处理器使用L2 Cache连接主存储器,此时L2 CacheLLC;有的使用L3 Cache,此时L3 CacheLLC。有些处理器系统中,使用L1 Cache连接其上的微架构,同时连接其下的主存储器,此时L1 CacheFLC的同时也为LLC

MLC其上与FLC相连,其下与LLC相连。在一个复杂的处理器系统中,Cache Memory层次结构由L0~L3 CacheEDRAM组成,其中L0 Cache与微架构直接相连,而EDRAM与主存储器相连。此时L0 CacheFLCEDRAMLLC,而L1~L3 CacheMLCs

在处理器系统中,不同级别的Cache所使用的设计原则并不类同。每一级Cache都有各自的主要任务,并不是简单的容量与延时的匹配关系。假设一个处理器系统中含有L1L2两级Cache。多数程序具有的TemporalSpatial Locality使得L1 CacheHit Rate非常高,即便L1 Cache只有4KB或者32KB。这使得在L2 Cache层面并不会看到过多的Miss[70],这使得L2 Cache层面的优化重点并不是匹配容量与延时,而且L1 CacheMiss Rate越低,L2 Cache的延时越无关紧要[70]

这使得在绝大多数微架构中,对于L1 Cache的优化专注于提高Hit Time,在现代处理器中其范围在3~5Cycle之间,为了避免在这个Critical Path上虚实地址转换的开销,很多微架构,如Cortex A8/9Opteron,直接使用了Virtual Cache。在L2 Cache层面,其Cycle与容量比大于L1 Cache的对应比值。这些设计方法使得Cache Hierarchy的设计在与直接使用一级Cache的整体Miss Ratio等效时,提高了Hit Time这个重要的参数。

在不同的微架构中,L1L2 Cache的关系可以是Inclusive也可以是Exclusive或者其他类型,如果是Exclusive关系,计算L2 Cache的有效容量需要累加L1 Cache的容量。在L2 Cache层面中,具有更多的时间,可以实现更多的Way Associatively进一步降低Miss Ratio

在现代处理器中,这个L1L2 Cache通常是私有的。LLC的实现需要考虑多核共享的问题,除了继续关注Hit TimeMiss RatioMiss Penalty这些基本参数之外,需要重点考虑的是Scalability,由多核处理器引发的Bus Traffic等一系列问题。

在一个大型处理器系统中,不同种类的Cache需要通过Cache Coherent Networking进行连接,组成一个复杂的ccNUMA处理器系统。这个Cache Coherent Networking可以采用多种拓扑结构,可以使用MESHn-Cube,也可以是简单的树状结构,环形结构。在整个ccNUMA处理器系统中,这个Cache Coherent Networking的搭建异常复杂。

比这个Networking更难实现的是Cache间的一致性协议,这个一致性策略可以使用纯硬件,也可以使用软件Message方式实现。Cache每多引入一级,这个一致性协议愈难实现愈难验证。其间的耦合关系设计复杂度已经超出许多人的想象。

Cache Hierarchy还与主存储器间有强的耦合关系,延时与带宽是两者间永恒的话题。在这个话题之后的功耗亦值得密切关注。在主存储器之下是外部存储器系统,包括SSD(Solid State Disk),磁盘阵列和其他低速存储器介质。外部存储器系统的复杂程度不但没有因为相对较低的速度而减弱,而且这种低速使得设计者有着更大的回旋余地,可以设计出远超过Cache层次结构使用的的复杂算法。如上文提及的LIRSClock-Pro页面替换算法。在这个领域没有什么算法是万能的,所有算法都有自身的适用范围。

在讲述这些复杂的设计之前,我们需要从更加基本的内容开始,需要回顾存储器读写指令的执行过程,在微架构中使用的LSU部件是Cache Hierarchy设计的最顶端。在多数微架构中,LSUAGUALU协调工作实现存储器读写指令的发射与执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值