找回密码
 注册
查看: 424|回复: 0
打印 上一主题 下一主题

摩尔定律和芯片设计,你该知道的那些事

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-17 18:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
自从上世纪六十年代以来,摩尔定律就一直驱动着集成电路和芯片产业的飞速发展。在过去的五十年中,芯片里的晶体管密度和芯片的性能都呈现了指数级的增长,而使用晶体管进行计算的成本和功耗也呈现了指数级的下降。可以说这些都是驱动人类社会和现代文明。在这半个世纪里飞速前进的根本动力。说到摩尔定律,就不得不提到一个人,那就是Jim Keller。他是摩尔定律的忠实信徒,也是一位微处理器领域的传奇人物。如果你从事芯片行业或者对这个行业感兴趣,那么你就肯定听说过他的名字。三年前他加入英特尔担任资深副总裁,并兼任硅工程部门的总经理。在2020年6月,他却令人意外的辞去了在英特尔的所有工作。在此之前,他曾任职于多家公司,比如DEC、 AMD、博通、苹果、特斯拉等公司担任工程副总裁或者首席架构师等工作。在他几十年的职业生涯里,他领导设计了多种X86和ARM的处理器架构,包括AMD的K7、K8、K12和Zen 架构,以及苹果用于iphone 和ipad 的 A4、A5处理器;还有特斯拉的自动驾驶处理器等等。除此之外,他还是X86-64bit指令集的作者之一。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps7FF6.tmp.png
今天我就结合这位大佬的观点和大家分享一下什么是摩尔定律,如何设计处理器和计算机系统,以及未来计算机和芯片技术的发展趋势有哪些?
微处理器和指令集是什么?
对于计算机而言,它有着比较明确的设计层级划分,这也是智能科学的特殊魅力之一。首先,原子位于这个设计层级的最下面。对原子进行有序排列之后,就会得到硅或者金属等材料。于是我们可以用这些材料制作晶体管。在往上我们可以使用晶体管组成逻辑门,很多小伙伴都知道逻辑门是数字电路的基本组成单元,他们对二进制数0和1进行操作,并完成不同的逻辑运算,比如与、或、非等等。有了这些逻辑门就可以构建稍微复杂一些的运算单元了,比如加法器、乘法器或者指令解码器等等。再往上我们就能将它们组合成更加复杂的功能模块。在现代处理器中,大概有十到二十个这样的功能模块组成。如果我们把这些处理单元和功能模块组合在一起,就可以运行计算机程序了。而这些程序也有很多的抽象层次。比如从最底层的指令集到汇编语言,再到C/C++、Java 等等。以上介绍的所有这些也构成了从原子到数据中心的抽象层次。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps7FF7.tmp.png
指令集就是用来编码计算机的一些最基本的操作,比如加法、乘法、存储、分支等等。事实上在过去的很长一段时间里,包括X86和ARM在内的各类处理器指令集是相当稳定的。对于一段程序,大概有90%的代码都是基于25个最基本的微指令,而这些微指令都已经十分的稳定和成熟了。拿英特尔举例,他的X86架构自从发明至今已经有大概25年了。基于人们很久之前定义的一套基本原则,他至今还在继续发展。以前计算机的工作方式是取址,然后顺序执行这些指令。然而对于现代计算机来说,它的工作方式是取大量的指令,比如500条指令,然后自动寻找并构建这些指令之间的依赖关系。用图的方式来表示,然后在独立的执行单元里分别执行这些依赖图的子集。现代计算机基本都支持深度乱序执行,他们有着一系列机制,负责记录和追踪哪些操作即将结束或者可能会结束。但是为了快速运行,计算机必须大量的取值,并从中寻找可能的并行性。这就好比我们看一本书,书里有很多的句子和段落,他们共同组成了这本书的内容。而上面介绍那种计算机设计的方法,就像尝试打乱句子或者段落的排列顺序。而不影响他们所表达的内容。比如说在介绍一个人的时候,我们可以说他是高富帅,但是高、富、帅这几点的顺序可以任意任意排列。你也可以说那个很高的人穿着一件红色的衣服,但此时这句话里就包含了依赖关系了。他和那个穿着红色的衣服,人很高,表达的并不是一个意思。这里说的计算机包括CPU和GPU。对于CPU来说,它有着很窄的并行度,这根本上是由于它顺序执行的架构所决定的。这也是和人的思考方式相同的。而对于GPU 来说,它由一堆处理器核心所组成,比如它的单个处理单元负责处理一个像素点,但它有着上百万个这样的单元。当你看一幅图或者一帧图画时,你并不会在意计算机先处理哪个像素点,这也是CPU和GPU的本质不同。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps7FF8.tmp.png
在现代计算机中,除了对并行性的探究之外,对分支的预测也是非常重要的。平均来说,每六条指令中就有一条分支语句,而目前人们可以做到远超过90%的预测正确性。做分支预测有这么几种方法。
在二十年前,我们会直接记录上一次的预测结果,并预测这一次仍将重复这个分支。而这种简单的预测方法可以达到85%的正确性。之后有人提出采用若干位来储存预测结果,并使用一个计数器对之前的预测结果进行统计。比如说如果之前走了一个分支,则计数加一。如果走了另一个分支,则计数减一,诸如此类。如果当这个计数器大于零,则预测第一个分支;如果小于零,则预测另外一个分支。而这种预测方法将预测的正确性提高到了大概92%左右。然后人们认识到对于某个分支节点的判断,很多时候还取决于之前的程序是如何运行的。因此这又进一步提升了预测的准确性。不过这些都不是现代计算机做分支判断的方法。现在计算机里采用了类似于神经网络的方法,简单来说,他考虑了所有的运行过程,并对这些运行过程进行了不同的深度模式识别,并综合这些结果得到分支预测的答案。事实上,在现代计算机里还有一个小型的超级计算机,专门用来计算这些分支和预测。如果我们还使用上面的计数器的方法做分支预测的话。为了达到85%的正确率,我们需要上千位的计数器。而为了达到99%的正确率,我们则需要上千万位。也就是说,为了将预测正确性进行线性的提升所付出的代价则是指数级的。然而很多时候我们并不需要做到百分之百的预测正确性,因为很有可能不同的分支接下来运行的程序和这些分支并没有任何关系。再回到我们看书的例子,我们可能都有这样的经历,那就是有时候段和段之间的关系并不是特别紧密。如果有一段你没有读懂,那其实并不影响后面的阅读。
计算机系统的确定性和随机性
如果你在CPU 上运行一段C语言程序,那么每次你都会得到一样的运行结果。但是对于现在的AI应用来说,其中的神经网络采用了很低精度的数据表示,而且输入的数据也有可能有极大的噪声,在这种情况下,又何必追求完全正确而且精确的计算呢?人们通过研究证明,当允许一定程度的误差时,很多算法其实可以在更短的时间内进行计算,从而带来功耗的降低和系统性能的提升,这就是当前比较热门的近似计算的研究。另一方面,在诸如高性能计算等很多应用中,如果同一个计算的结果每次都不相同,那么这是不可接受的。而且如果此时的计算结果发生了错误,往往很难确定究竟是算法的错误还是计算机的错误。因此,在计算机系统中,确定性和随机性之间,人们需要做仔细的权衡。再进一步讲,其实每次运算结果都相同,其实也并不代表在计算机中就执行了相同的计算,或者使用了相同的数据通路。事实上对于很多在现代计算机中运行的程序来说,运行一百遍可能会得到相同的结果,但每一次运算在计算机里面运行的顺序,采用的计算机单元涉及的硬件结构等等其实都不尽相同。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps7FF9.tmp.png
重构计算机架构
当设计和改进计算机架构的时候,人们容易陷入这样的误区。比如有人提出需求,并希望说计算机比现在要更快10%。于是架构师就开始看哪里可以增加存储器,哪里可以增加运算单元,或者是增加数据总线的宽度等等。渐渐的你会发现每个运算单元都会变得越来越复杂,系统性能也会随之到达瓶颈。也就是说不管你在增加多少存储,增加多少运算单元,增加多少总线宽度,计算机的性能都无法提升更多了。这个时候聪明的架构师都会认识到,性能瓶颈是由之前的系统划分,以及这些复杂运算单元的相互耦合所决定的。于是他们就会对系统进行重构。这样的结果是系统性能得到进一步提升,然后每个计算单元的复杂性也会大大下降。Jim Keller认为,像这样的系统级重构,每三到五年应该来一次。也就是说,如果你想从根本上提升计算机架构的性能,那么至少每隔三到五年就需要重新开始进行设计。对于X86架构来说,尽管指令集本身没有发生太多有趣的改变。但基于这些指令级的X86架构,在这些年里有着巨大的变化。英特尔和AMD都有很多各自的新架构出现,对于计算机架构的重新设计会带来两个重要的问题。首先,对于需要每个季度发布业绩的团队和公司来说,他们往往对这种系统级重构畏手畏脚。然而,对于有着长远目标的团队来说,重构时带来的短期风险也会影响他们达成长期的目标。
因此一个常见的方式就是同时做多个项目,这样你就可以在优化已有设计的时候,同时开发全新的架构。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8009.tmp.png
摩尔定律失效了吗
在谈摩尔定律失效这个问题之前,我们首先应该知道什么是摩尔定律。上世纪六十年代中期,英特尔公司的创始人之一时任仙童半导体工程师的戈登摩尔发表了一篇文章,他在这篇论文中指出,芯片上的晶体管密度每年会提升一倍。在1975年,他对这个规律进行了修改,将晶体管密度翻番的时间从一年改成两年,而这个规律在后来被人们称为摩尔定律。事实上,摩尔定律并非是一个物理定律,它更多的是描述和预测了晶体管发展的趋势和方向。人们对摩尔定律有着很多的引申和解读。比如根据摩尔定律,计算机性能每两到三年会提升一倍。这项表述在过去的若干年里都相当正确。近年来,人们引入了所谓的收缩因子,它大概是0.6左右,也就是说每两到三年的性能提升,从1除以0.5变成了1除以0.6不过,随着芯片行业的发展,每隔一段时间都会有人说摩尔定律将死,这和我国的股市很类似。有人年初说永别了三千点,最近又有人说四千点才是牛市的起点。 如何突破五千点大关等等等等。事实上这些讨论都是伪命题,我们应该关注的是现象背后的本质。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps800A.tmp.png
很多人认为摩尔定律代表的不过是晶体管变得越来越小。但实际上摩尔定律代表的是推动这一变化背后的千千万万个技术创新。对于某个技术来说,它会随着时代的演进而逐渐落伍。但大量这样的技术创新结合在一起,就能推动整个领域不断前行。以前晶体管的长、宽、高大概是1000个原子,现在晶体管的尺寸变成了长宽高各10个原子 尺寸缩小了一百万倍,现在的技术允许人们直接对原子进行排列,这理论上会得到更小的精细管,但在实际生产中,你是无法对十的二十三次方个原子一一排列的。因此,科学家们在物理、化学、材料等多个领域进行了很多创新,这使得我们能稳定的制造高良率的半导体器件,而这些创新也是摩尔定律背后的根本推动力量。作为计算机架构师来说,我们需要做的是考虑如何利用这些不断增加的晶体管,并基于此设计更高效的计算机架构。另外一个颇有争议的芯片界大牛Raja Koduri曾经说过,晶体管尺寸每缩小10倍,就会衍生出一种全新的计算模式。他也将现在的计算模式分成了标量计算、向量计算、矩阵计算和空间计算四类,分别对应于基于CPU、GPU、AI ASIC和FPGA的计算,同时我们也要考虑很多的制约因素。比如人本身不会变得更加聪明,而且团队的规模不会不断增长。此前我们可以使用更快的计算机来帮助我们设计计算机,但现在这种方式已经不再有效了。我们也因此需要对设计软件进行不断的重构和更新。
科技的发展离不开大师的推动。作为从业者,我们应该高兴生于这个风起云涌的时代, 因为这里随处充满了无穷的机遇和挑战,作为普通人,我们也应该高兴生于这个时代,因为能够享受科技的发展,为生活带来的无尽便利。
1 `% a9 r% s& N+ k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-2-5 12:48 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表