读书报告--
Requirements, Bottlenecks, and Good Fortune: Agents for Microprocessor Evolution
《Requirements, Bottlenecks, and Good Fortune》是Yale Patt教授于2001年11月发表于《Proceedings of the IEEE》的一篇invited paper。在文章中,Patt教授主要做了三项工作:对微处理器领域的基本框架进行了描述、展示了自微处理器诞生以来30年时间里的重要发展、对微处理器的几个可期待的未来进行了展望。下面,笔者将大致按照文章的脉络对其内容进行梳理,偶尔加入笔者自己的理解对部分内容进行阐述。
一,基本框架
A. 计算机体系结构:权衡的科学
计算机体系结构这个领域在Patt看来,更像是一门艺术而非科学,我们总是在实践中得到更多的经验,接着利用得到的经验去进行新的设计。按他的话来说,如果非要说这是一门科学的话,那么这就是一门权衡的科学。计算机结构设计师的工作就是利用积累的知识不断地进行各种权衡,这个过程贯穿了微处理器发展的始终。
这其实是很直观的:计算机体系结构地设计过程就是综合各种功能元件并将它们组合在一起地工作,这些元件往往对于空间资源、能量资源有着竞争关系,我们总是要进行取舍。而对于通用计算机来说,我们需要面对的是千奇百怪的计算任务,很难说有这么一个体系结构范式,能够在所有的计算任务中都脱颖而出,往往需要人们的经验指导、修正,在不同的功能和局限之间进行权衡。因此说,计算机体系结构是一门权衡的科学。
B. 抽象变换的层次结构
本节的原标题是“Levels of Transformation”,我把它译为“抽象变换的层次结构”。这有点拗口,它的含义是计算机体系结构从电子元件、电路、到算法、问题求解这样一层层抽象的结构。具体来说,如果想要解决一个问题,我们首先应该从问题出发设计一个算法,然后将算法编制成为程序,接着将程序映射到指令集架构(ISA)上,再由ISA映射到微指令结构(Microarchitecture),然后便可以将微指令直接用电路实现,而电路最终是由电子元件组成的。
在这个过程中,我们自顶向下经历了问题、算法、程序、ISA、Microarchitecture、电路、电子元件这七个抽象层次。今天我们所说的“微处理器”,主要指的就是其中ISA、Microarchitecture、电路这三个层次。软硬件编程的接口就是ISA,实现它的硬件电路就是电路,这些电路的集合就是Microarchitecture。
典型的ISA包括IA-32和SPARC、Alpha、Power-PC。每种ISA都各有长短,而且每种ISA都可以对应多种不同的Microarchitecture,例如IA-32可以由奔腾系列、486、AMD的K系列等等实现。
就如ISA这一层由很多选择,每种选择各有优劣一样,上面提到的7层抽象中每一次抽象都包含着不同的各有长短的选择,而作出每一次选择都需要我们进行权衡。举个例子,一个很常见的权衡就是低能耗和高性能之间的权衡。一般来说,高性能就意味着高能耗,如何抉择就是考验设计者对于问题的理解是否到位的问题。
C. 设计要点
如上所述,在设计过程中我们往往需要考虑很多因素并在其中进行权衡,其中有一些相对来说比较重要的方面,Patt称之为微处理器的“设计要点”。例如性能、成本、散热、耗能、高可用性等等。其中高可用性等价于容错性(fault tolerant),指的是处理器永远不会出现故障(fail)。
这里提到了一组很容易被混淆的概念:能耗重视(power awareness)和低能耗(lower power)。简单地说,前者指的是在尽量保持性能的前提下降低能耗,而后者只强调低能耗、能长时间独立运行。
D. 应用空间
抽象层次中的“问题”其实是个较为空泛的词,它指代的其实是应用的空间(application space)。随着微处理器的应用空间大小现象级地增长,应用空间(或者说微处理器最重要的那些应用)将会越来越明显地驱动微处理器的发展。前面提到的高可用性和低能耗性就是典型的两个由特定应用驱动发展出来的特性。
另外一些对设计要点有特殊要求的应用空间还包括:
[if !supportLists]1)[endif]科学应用2)转账应用3)商业数据处理4)网络应用5)实时应用6)嵌入式7)媒体应用8)任意一个人们想在自己的电脑上运行的应用
还是那句话,在每个应用空间的微处理器设计中,权衡无处不在。
E. 微处理器进行处理的基础知识
简单来说,微处理器只做了一项工作:处理指令。在这个过程中发生了三件事:取指令到处理器、取数据到处理器、处理。
F. 取指令
早期,处理器一次只取一条指令,然后解码、送去核心进行处理。但是随着时间的推移,处理器一次能取4条指令,并且有着往6条、8条发展的迹象。其实我们要做的就是取到充分多的指令,这样处理器的资源就可以被有效地利用。但是有三件事是这条路上的障碍:指令缓存不命中(instruction cache miss)、取指令中断(fetch breaks),以及条件分支预测错误。如果缓存不命中,那么取到指令的条数就是0,并且一直到cache重新加载好才恢复正常。而取指令中断则发生在所要取的指令恰好正在被执行的情况下,这时同周期取到的所有指令都是无效的。分支预测错误更不用说了,整个分支的指令都是无效的。
G. 取数据
取数据最理想的情况是,任意时刻我都有需要的数据,但是处理器处理的速度远比访存的速度要快,且这个差距在不断拉大,因此取数据的问题也在不断地变得严重。现在的解决方案是使用层次存储结构。
H. 指令执行
不同的运算单元往往存在先后依赖关系,即一个单元需要另一个单元的输出作为输入。但是随着处理器时钟周期的缩短,这个延迟越来越麻烦。
二, 演化的动因
有很多东西都是处理器演化的动因,例如市场,例如工程师的创造力等等,但是最重要的还是三个东西:新的需求、平静、好运气。
A. 动因一:新的需求
这方面有很多例子,例如对更高性能的需求使得一次取指令的条数从一条变成了多条,从而使宽发射微处理器(wide-issue microprocessor)诞生。
另外,同样出于对更高性能的需求,人们在一个执行核心中加入多个功能相同的单元,从而在一个时钟周期中可以执行多条指令。
而现今最普遍的新需求是关于能耗的,即前面提到过的感功计算(功率感知计算,power-aware computing)。它的要求是性能不变,功耗更低。
最后,人机接口也因为人机交互的频繁而得到越来越多的关注。
B. 动因二:瓶颈
前面提到处理器处理指令的三个步骤时,我们连带提到了这三步里的限制因素。目前为止,微处理器的大部分进展都是为了消除这些瓶颈。
例如取指令时进行访存的时间太长,这里的瓶颈是低速的存储,因此人们发明了指令缓存(instruction cache)。
例如在取指令时,如果第二条指令是条件分支,那么这时只会取到2条指令,而不是4条。因此奔腾4处理器里加入了Trace Cache。在传统的Instruction Cache里,只存放接下来要执行的指令,接着进行解码和执行;而在Trace Cache里面,执行过程中相近的指令被放在一起,这样就能减少缓存不命中的概率。
另外在条件分支这里还有一个解决方案,就是加入分支预测器,预测接下来可能进行哪个分支,提前进行取指。
C. 动因三:好运气
好运气指的是意料之外的惊喜,比如某项新技术的突破。例如我们能够把功能单元做得更小,就可以有多余的空间来做其他事情了,比如加入其他的功能单元等等。
三,演化:从1971年到今天
现在的芯片和最初的芯片已经大不相同了,下面是一些芯片的发展的例子:
A. 流水线
B. 片上缓存
C. 分支预测
D. 片上浮点单元
E. 额外的专门功能单元
F. 乱序处理
G. 集群技术
H. 片上多处理器(CMP)
I. 同步多线程(SMT)
J. 快速核心
四,10亿晶体管芯片之未来
作者认为,(2001年起)十年内,一个芯片上大概会有10亿个晶体管,芯片频率会高达6到10 GHz。如果我们有了制造这样的芯片的能力,我们应该用之做什么呢?
计算机体系结构设计师的意见并不统一。
一些人认为我们可以将100个1千万晶体管的微处理器凡在同一个芯片上。事实上他们认为一个1一千万晶体管的处理器就已经很足够了,制造更大的东西只会得到越来越少的边际效用(incur diminishing returns)。
另一些人认为比起使用CMP技术,SMT技术显然更好。因为CMP造成了资源的冗余,使用SMT技术可以通过共享这些资源来节省芯片资源,利用节省下来的资源,我们可以安装其他的功能单元,例如更大的cache、更好的分支预测器、更多的功能单元,等等。
然而还有一些人,包括Patt,认为,在资源共享上,SMT技术当然要比CMP技术好,但是在一些非科学的基准上(nonscientific benchmarks),他们都不太行。原因是,大多数重要的非科学基准(important nonscientific benchmark)有着对于SMT技术来说很负面的特点:它们只由单个指令流组成。而众所周知,SMT技术针对的主要是多个指令流的情况,因此这项技术并不能在这些benchmark上取得良好的成果。另外,作者他们还认为,一个大型的集成芯片应该能够解决一些由多个芯片组成的芯片网络计算机解决不了的问题,因此他们支持做一个有着10亿晶体管的高性能单处理器。
当然了,还有人说,现在的CAD已经胜任不了芯片验证的任务了,再设计更大型更复杂的芯片是不负责任的。因此他们支持制作一个简单的核心处理器,配上超大的片上缓存。
有些更关注成本的人认为,更高的集成度往往意味着更低的成本,因此它们建议将整个系统做到一个芯片上。
对于作者而言,他对上面的想法都不是很赞同,他个人的想法是用这种技术来改进高性能单芯片计算机,使其更好地处理单指令流应用。他的期望有:
A. 新的微处理器
将7层抽象层次结构中的程序层和算法层也放入微处理器的架构中。即将算法用硬件的形式来实现。这个想法可能以可重构逻辑元件的形式(文章下面会再次提到),或是ISA的特殊指令,再或者以芯片上的集成功能单元的形式来实现。
B. 新的数据路线
频率太快了,以致于信号线路的长度必须给予着重考虑(数据还没走到,下一个时钟周期就开始了,这意味着信号线路太长/时钟频率太快),有了这个限制,数据通路可能需要重新设计。
C. 内在的容错机制
频率太快的情况下,机器对于硬件错误将会非常敏感,因此未来的微处理器将不得不提供检查和纠错的功能。
D. 异步和同步单元共存
如今,时钟的偏移已经是一个很严重的问题了。到了6 GHz的时候,这个问题只会更加严重。事实上,异步的结构确实更难设计,但是它们没有时钟同步的问题。作者的期望是处理器上的不同结构将会异步进行操作,之后每隔一段时间进行一次时钟同步。
E. 不同的功能单元有不同的时钟周期
未来,处理器上的不同部分可能会有不同的时钟周期,需要的快一点,不需要的慢一点。运算器将会是时钟周期最快的地方,而这哪是不需要的地方时钟周期可能非常慢。
F. 新材料
尽管作者没有什么证据,但作者乐观地认为很可能会有新材料来让芯片的性能登上一个新台阶。
G. 微指令的扩展使用
因为片上带宽更加方便和充分,作者认为这部分资源应该得到更加充分的利用。例如微指令例程可以利用闲置的资源来进行一些额外的工作,比如动态重新编译、计算一些集成指令、调整Cache替换策略等等。
H. 可重构的逻辑器件
一些硬件逻辑在某种应用上发挥重要作用,而在另一些应用上却没用,那么能不能动态地改变硬件逻辑以适应不同应用的要求呢?在芯片上集成一个低粒度的FPGA,或者一个高粒度的逻辑结构,或许会在未来的芯片上变得常见。
I. 大杂烩
作者在这里罗列了一些他期望看到的新特性:
1) Trace Cache的扩展使用
2) 片上微指令,用来调试硬件结构
3) 对正在执行程序的动态重新编译
4) 多级(最少三级)缓存,以及附加的ISA指令
5) 积极的值预测硬件
6) 性能监测硬件,能够实时调整硬件
7) 一个用来监测和影响芯片能量使用的片上结构
五,结论
作者表达了自己的期许,这里值得提的是,作者认为CAD技术已经不够了,需要进一步发展以满足芯片设计的需求,还说这一切的基础是摩尔定律还在发挥作用。
六,20年后的回顾
距离Patt教授发表这篇文章依赖,已经大概过去20年的时间了。笔者对比第四章I节的内容,对其中的几条预测进行验证。
1) Trace Cache并没有被更广泛地使用。
Trace Cache带来的性能提升是建立在代码重用率较高的基础上的。但是由于程序规模的扩大,程序越来越多,代码重用率不高。加上Trace Cache的实现比较复杂,因此现在这项技术比较少见。
2) CPU频率止步于4 GHz
文章中预测CPU频率可能到达6 GHz,但是CPU频率由于散热的原因只能止步于4GHz
3) CPU晶体管数目确实到达了10亿
事实上,2010年的酷睿i7-980X晶体管数量达到了11.7亿。
4) 关于不同的功能单元有不同的时钟周期的预测
目前cpu频率分为主频和外频,cpu的频率往往高于主板的频率;而多核心CPU的不同核心也可以运行在不同的频率。而CPU核心内部的不同功能单元,目前好像仍然是一个频率的
5) 多级Cache
这个预测已经实现了,现在的计算机多采用多级Cache的设计,三级Cache很常见。如果用户想要操作Cache,ISA提供了相应的实现。例如在ARM中,可以通过操作CP15协处理器实现。
6) 关于新型微处理器的设想
在文章中,Patt预测未来微处理器会综合一些算法的东西到硬件电路上去。个人认为这个想法已经实现了。典型的如GPU、TPU,它们将一些某些领域常用的重要算法综合到硬件上去,提高了机器新能,解放了CPU算力。不过,它们不是CPU的片上单元,而是计算机中独立的功能部件。
其他的一些预测,由于我自身知识结构的限制,暂时没能证明和证伪。
七,我的预测
在文章的最后,虽然由于自己知识和经验的限制很有可能是错误的,我还是试着做一下自己的预测。
CPU将走向何方?对比Patt的预测,最大的失算可能是CPU频率的增长并没有达到预期,这是因为散热的困难。而摩尔定律的失效,与此应该有很大关系。因此,如果超导材料能够实现应用,CPU的频率应该能够进一步提升。
另外,Patt教授认为CPU的不同功能单元可以具有不同的时钟周期,我认为这个预测是合理的、可能实现的。
最后,随着人工智能技术的发展,我猜测CPU可能会进行一些适应性的改进,例如加入矩阵运算单元,优化矩阵取存,或者优化与GPU、TPU的对接等等。
八,结语
Patt教授的这篇文章在很多方面都具有启发性。一方面,他梳理了CPU的发展和框架结构,使得笔者对于CPU有了更加整体的认识。对于其中介绍到的知识,虽然有些不能完整地理解,但是也对自己的知识结构有所裨益。另一方面,通过这篇文章,笔者对于CPU的发展动力有了感性的认识,今后学习到新知识的时候,也会对其动机有所体会。如果用一句话来总结的话,这篇文章将原本有些散乱的CPU发展和技术知识串成了串,有一种清晰的感觉。
网友评论