CPU通识课

978-7-115-57637-8
作者: 靳国杰张戈
译者:
编辑: 赵祥妮

图书目录:

详情

中央处理器(CPU)是计算机中最重要的芯片。CPU的设计和制造水平是一个国家信息技术实力的象征,产业生态的构建需要培养更多掌握CPU技术原理的高端人才。本书基于龙芯CPU团队在20年间积累的技术和经验,从CPU概览篇、CPU术语篇、CPU原理篇、CPU系统篇、CPU生产制造篇、CPU家族篇、CPU生态篇、中国CPU篇八大板块剖析CPU,生动有趣地讲解了CPU的基础概念、核心原理、生产制造及产业生态,更解读了龙芯CPU的研发历史、核心特色和生态建设经验,让读者循序渐进地进入CPU的殿堂。

图书摘要

版权信息

书名:CPU通识课

ISBN:978-7-115-57637-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

著    靳国杰 张 戈

责任编辑 赵祥妮

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

中央处理器(CPU)是计算机中最重要的芯片。CPU的设计和制造水平是一个国家信息技术实力的象征,产业生态的构建需要培养更多掌握CPU技术原理的高端人才。本书基于龙芯CPU团队在20年间积累的技术和经验,从CPU概览篇、CPU术语篇、CPU原理篇、CPU系统篇、CPU生产制造篇、CPU家族篇、CPU生态篇、中国CPU篇八大板块剖析CPU,生动有趣地讲解了CPU的基础概念、核心原理、生产制造及产业生态,更解读了龙芯CPU的研发历史、核心特色和生态建设经验,让读者循序渐进地进入CPU的殿堂。

本书可作为高等院校计算机专业本科生或研究生的通识教材,也可作为从事计算机体系结构或计算机系统设计的工程技术人员的参考书。本书也适合非专业人士阅读,尤其适合国内信息化厂商或想支持中国自主信息产业体系建设的有志人士阅读。

从实践中来,到实践中去

编  委   会

主 编:靳国杰

审 定:张 戈 胡伟武

编写组:杜望宁 李 超 何 涛

     王以勇 郭同彬 邓洪升

     刘 坚 杨 昆

顾问组:汪文祥 王焕东 吴瑞阳

     范宝峡 张福新 高 翔

本书使用搭载龙芯3A5000处理器的计算机编写。

推   荐   序

CPU是信息社会的发动机,我们每个人都享受着CPU提供的服务。

这是一本精练的科普书。作者多年来从事CPU的专业研发,在书中分享了他们的知识、经验和见解。翻开目录,你看到的是一座包罗万象的CPU“大观园”。这里既有CPU的基本概念、常用术语,又有CPU的设计原理,还有CPU的产业规律。

在这本原创的科普图书中,作者写到精微之处,往往有感而发。这无不表明本书不是对史料的一般罗列,而是作者在多年的科研实践中形成的评判和论点,能够给读者更多的思想启示。尤其是在最后一篇中,作者对中国CPU的发展史进行了深刻的点评,为极具自主创新精神的中国计算机先驱们描绘了永久的画像。

自从担任中国计算机学会科学普及工作委员会主任以来,我观察到国内很多高科技企业开始重视科普工作。这些已经站在IT技术高峰上的科研工作者,愿意在科学普及工作上投入时间,给大众更多有益的精神食粮。我想,这也从一个侧面证实了中国科学事业的进步。

阅读这本书,不一定是在大学的图书馆里,同样可以在出差的飞机、高铁上,在给孩子讲解科学技术的课堂上。

“Know yourself.”,这是古希腊德尔斐神庙门楣上的一句箴言,提醒人类把认识自己、认识世界作为最高的哲学目标。相信看完本书的读者也能够对CPU世界多一分认识,看待世界多一个视角。

CPU与你同行。

王元卓

王元卓:博士,中国科学院(中科院)计算技术研究所研究员,博士生导师,中科大数据研究院院长,中国计算机学会科学普及工作委员会主任,中国科普作家协会副理事长,2019年“中国十大科学传播人物”,《科幻电影中的科学》系列手绘科普图书作者。

前  言

科技的发展既需要技术类书籍,也需要通识类书籍。通识类书籍使非专业人士能够一窥技术本质,领略智慧之美。

人才的培养需要有一技之长的专才,更需要具备综合素质的通才。通识课应成为高等教育的重要内容。有成就之人无一不是广学博识。通识类书籍能使读者汲取营养、开阔眼界、提高素养,具备大局观,提高宏观决策能力。

本书讲述了计算机在70多年的发展历史中积累下来的CPU的本质思想。CPU包含的工程智慧对各个行业都有启示作用。

本书编写团队见证了中国自主CPU 20余年的发展,并长期参与龙芯技术研发、市场推广,对提高中国CPU核心能力、建设中国信息化生态的道路形成了初步认识。

希望读者学会以CPU思维分析问题,以CPU视角观察世界。

靳国杰

2021年11月于山西长治漳泽湖畔

CPU概览篇
时代与机遇

第1节 CPU时代

一个有纸、笔、橡皮擦并且坚持严格的行为准则的人,实质上就是一台通用图灵机。

——艾伦·图灵(1912—1954)

中国科学院大学2019年本科新生录取通知书里的龙芯3号CPU

信息社会的基石:CPU

CPU = 运算器 + 控制器

计算机是一种可以执行计算功能的自动化设备。在信息社会中,无数的计算机每天都在执行大量的信息处理和计算工作,本来属于人的工作可由计算机自动完成,大大提高了社会生产力。

1946年,世界上第一台通用数字计算机ENIAC在美国宾夕法尼亚大学被制造出来,标志着人类社会进入信息化时代。

按照经典的计算机结构模型,一台计算机由5大部分组成:运算器、控制器、存储器、输入设备、输出设备。计算机科学先驱冯·诺依曼(又译作冯·诺伊曼)在1945年写成论文First Draft of a Report on the EDVAC,以101页的篇幅描述了计算机的结构模型,奠定了现代计算机的结构基础,如图1.1所示。

图1.1 冯·诺依曼1945年写的论文的目录,确立了计算机的5大组成部分

冯·诺依曼体系结构是现代计算机共同的模型(见图1.2),现在已经成为每个计算机专业学生在大学必学的知识。无论是高性能的大型科学计算机,还是我们身边的台式计算机、手机,都遵从冯·诺依曼体系结构。

图1.2 冯·诺依曼体系结构

抽象地讲,计算机的主要工作原理如下。

(1)5个部分之间由通信线路进行连接。

(2)要运行的任务(程序)保存在存储器(M)中。程序以连续排列的指令为单位组成,每条指令包含了一项计算操作。

(3)计算机启动后,控制器(CC)从存储器中依次读取指令,将指令包含的信息传送到运算器(CA)中,由运算器解析指令的功能、执行数值运算。

(4)指令执行时,有可能需要从外界读取要加工的数据;控制器向输入设备(I)发出消息,由输入设备把数据传送到计算机的内部。

(5)指令执行结束后,控制器可以把运算器的计算结果存入存储器;控制器也可以向输出设备(O)发出消息,由输出设备把计算结果传送到计算机的外部。

(6)控制器再从存储器中读取下一条指令并送入运算器。

(7)上述“取指令—执行指令—保存结果”的过程多次重复执行,直到程序的最后一条指令执行完成。

这样整个程序就运行结束了,计算机的使用者得到了期望的计算结果。

在实际的计算机中,运算器、控制器两部分经常被一起设计,二者合称为中央处理器(Central Processing Unit,CPU)。CPU的主要任务就是由控制器指挥计算机中的其他部件一起协同工作,并且由运算器执行数值计算。

CPU是计算机中最重要的芯片。CPU每时每刻都在驱动着信息化社会的运转,就像汽车中的发动机一样,是全世界不可缺少的基石。

电脑之心:CPU在计算机中的地位

CPU在计算机中的地位,就像大脑在人体中的地位

CPU经常被称作“电脑之心”,是当之无愧的计算机中枢。

CPU指挥计算机中的其他部件工作。CPU是程序的调用者和运行者,程序的每一条指令都要经过CPU的解析和执行。外界向计算机输入数据,需要CPU进行接收;程序运行结束后,需要CPU发出指示才能把计算结果输出给外界。

CPU是计算机中最复杂的芯片。CPU采用的是超大规模集成电路,现代的芯片制造技术可以在一根头发丝的宽度上排列1000根电路连线。台式计算机中的一个芯片就能包含50亿个晶体管,而人脑中的神经元的数量也就在800亿个左右。一台计算机中,CPU是复杂度最高、工作最繁忙的部件。主流CPU中的晶体管数量见表1.1。

表1.1 主流CPU中的晶体管数量

CPU

制造工艺

核数

晶体管数量(个)

Apple M1

5nm

8

160亿

Intel Haswell GT2 4C

22nm

4

14亿

AMD Vishera 8C

32nm

8

12亿

Intel Sandy Bridge 4C

32nm

4

9.95亿

Intel Lynnfield 4C

45nm

4

7.74亿

CPU承载了计算机中最本质的技术原理。CPU的架构从根本上定义了一台计算机的核心功能,CPU原理涵盖了整个计算机大部分的运行过程。一本计算机原理书会用最大篇幅讲述CPU的原理。因此对于计算机原理的学习者来说,从CPU入手是最直接的途径,也是必由之路。

从大到小:CPU外观的变化

70多年前的早期计算机到现在的手机,CPU的基本原理不变

电子计算机的发展已经有70多年的历史,制造工艺历经电子管、晶体管、集成电路(Integrated Circuit,IC)等多个阶段,体积不断变小,计算速度不断提升。

在计算机发明的最初年代,计算机的特点就是“体积大”。看老照片就可以发现,一台计算机要占用多个房间,一个CPU要占据几个机柜的空间。

到20世纪70年代,得益于集成电路技术,个人计算机的CPU能做成几厘米见方的一个芯片。

而在如今的移动计算年代,手机、平板电脑的CPU只是芯片里面集成的一个几毫米见方的电路模块,只有把芯片打开才能看到里面的CPU。

三代CPU的外观如图1.3所示。

图1.3 三代CPU的外观:机柜、独立芯片、芯片内的电路模块

但是,从最初的“大计算机”到现在的手机,其原理和架构是一脉相传的。现在的计算机、智能设备中都要有一个CPU,虽然它们的计算能力已经远远超过ENIAC,但是仍然处处体现出它们是计算机前辈的“缩影”。

国之重器:CPU为什么成为信息技术的焦点?

CPU影响国家经济发展和信息安全

有没有想过,小小的CPU为什么会成为国之重器?

在全球范围内,高端CPU的设计技术被少数发达国家的企业掌握,CPU不可避免地成为国家之间博弈的筹码。如果一个国家没有自己的CPU企业,在信息系统中只能大量采用国外CPU产品,那么无论是台式计算机、服务器,还是工业控制等领域广泛使用的高性能CPU,都无法摆脱被国外产品长期垄断的命运。

从经济角度看,每年从国外进口的CPU数量巨大,信息产业的高额利润大部分被国外厂商赚取;从知识产权角度看,进口CPU的知识产权被国外把控,高端技术难以引进;从信息安全角度看,国外产品往往不提供设计资料和源代码,使用过程中经常出现后门和漏洞,国家的重要信息数据有被窃取和泄露的巨大风险。CPU在计算机、通信设备、工业控制设备中使用广泛,CPU的缺少会导致企业的产品生产和经营活动受到严重影响。

CPU就像发动机、航空航天技术一样,是人类创造出来的高精尖技术。对于强烈依赖信息技术来驱动技术转型、实现产业升级的国家,掌握CPU技术成为影响一国经济发展和信息安全的焦点。

CPU分成哪些种类?

世界上第一款商用计算机微处理器是1971年发布的Intel 4004

CPU家族庞大,种类繁多,可以按不同的方式进行分类,如图1.4所示。

图1.4 CPU的多种分类方式

按照功能的适用范围,可以将CPU分成通用CPU和专用CPU。

通用CPU可以用在不同的场合,不局限于某一种应用,在设计上往往采用共性的结构,运行常用的操作系统、应用软件。常见的台式计算机、服务器、笔记本计算机、手机中的CPU都属于通用CPU。

专用CPU面向某一应用领域专门设计,往往采用特殊结构来最大化发挥其在该领域的优势,也可以牺牲掉不必要的功能。专用CPU运行的操作系统也往往是根据需求定制的。例如在汽车上,面向整车状态监测而专门设计一个CPU,只用于监测特定的物理量,软件固化烧写在CPU内部的存储模块中。在可穿戴设备中,针对节省电能的要求设计的结构简单、低主频、低功耗的CPU。在智能门锁中,为了支持按键、刷卡、蓝牙等多种开锁方式而专门设计的低功耗CPU。

按照制造工艺,可以将CPU分成电子管CPU、晶体管CPU、集成电路CPU,以及超大规模集成电路CPU。

电子管CPU是第一代,使用时间从1945年到20世纪50年代末。

晶体管CPU是第二代,主要活跃于20世纪50年代末到20世纪60年代。1954年,美国贝尔实验室研制出世界上第一台全晶体管计算机TRADIC,装有800个晶体管。

集成电路CPU是第三代,始祖是1971年发布的Intel 4004,这也是世界上第一款商用计算机微处理器,在一块芯片上集成2250个晶体管。

超大规模集成电路CPU是第四代,一般是指所包含的晶体管数量庞大(例如超过100万个)的芯片。龙芯CPU也属于这一代。

按照使用场合,可以将CPU分成科学计算CPU、信息化设备CPU、移动计算CPU、嵌入式CPU、微控制器CPU。按这一顺序,CPU的性能逐渐降低,而使用数量呈指数级增长。

科学计算CPU的特点是数值计算能力强,计算单元多,适合于大量CPU(几千个及以上)互相连接组成计算集群。科学计算CPU主要用于高性能的超级计算机。

信息化设备CPU通常指台式计算机、服务器、笔记本计算机中的CPU,特点是计算能力受应用需求的发展牵引,兼顾计算性能、成本、功耗的均衡设计。

移动计算CPU通常指手机、平板电脑中的CPU,特点是注重控制功耗、面积,倾向于采用世界最先进的制造工艺,经常和移动通信模块共同组合成一个电路芯片。

嵌入式CPU一般性能较低,功耗也相应较低,成本低,自带面向控制领域的丰富接口,大量用在工业控制和电子设备上。

微控制器CPU则比嵌入式CPU更为低端,虽然体积小,但是用量巨大。现在只要是带有智能控制功能的电子设备都会包含微控制器,甚至我们每个人身上都可能携带了好几个微控制器。未来一旦真的实现“万物互联”,微控制器将无处不在。

微观巨系统:为什么说CPU是世界难题?

在一根头发丝的宽度上排列几千根电路连线

CPU是一个典型的微观巨系统,可以算是人类制造出来的最精密、最复杂的工程产品。

1.电路设计复杂

CPU是所有集成电路中最复杂的。CPU核心源代码至少上百万行,模块之间存在复杂的网状调用关系,复杂度随代码行数的增加呈指数级增长。高端CPU集成了一个电路设计企业多年的经验。一个缺乏CPU设计技术知识的人员,即使拿到一个CPU的源代码,也几乎不可能在短时间内读懂、消化和掌握。

CPU集成了高性能计算的理论研究成果。随着计算机结构的发展,CPU也不断加入新的学术成果,例如流水线、动态调度、多发射、猜测执行等高级机制。几十年来大量计算机科学家不遗余力地挖掘性能“油水”,每一轮发展都会使CPU的复杂性提升一截。

2.生产工艺复杂

CPU的生产制造更需要世界级的高端装备。半导体电路进入纳米时代,这意味着晶体管本身的最小尺寸、两个晶体管之间的最小距离都已经进入纳米级别的微观尺度。例如手机CPU已经采用7nm工艺来生产,相比之下,硅原子的直径约10-10m,这样算来,1nm与10个硅原子连接起来的长度相近,芯片中两个晶体管之间的最小距离也就是不到100个硅原子!全球能够制造这样精密芯片的企业不超过5家。

3.工程细节复杂

CPU产品还要考虑大量工程细节,例如结构参数、材料、制造、可靠性,这些知识的广度和深度都超过了科学原理。因此在CPU团队中不仅需要多方面的复合型人才,更需要这些人才在实践中长期磨合。

CPU的开发过程不能全靠自动化的设计工具,反而强烈依赖于人工设计。开发简单芯片只需要使用电子设计自动化(Electronic Design Automation,EDA)工具,再加上一种类似于C语言的电路描述语言就能快速实现芯片设计需求。而为了增强性能、降低功耗,CPU的核心模块经常需要手工定制电路,可以理解为在纳米级尺度的电路板上对晶体管进行“排兵布阵”。因此,电路定制能力是CPU厂商实力的一个核心标志。

4.软件生态复杂

CPU需要建设配套的软件生态,其复杂性远远超过CPU本身。CPU作为计算机中的元器件,本身是无法独立工作的,必须要有相配合的操作系统、编译器、开发环境、应用软件才能发挥其使用价值。这些软件也都是超过千万行代码的大型系统,需要IT产业中很多厂家的协作。

硅谷的企业之所以保持领先地位,除了技术先进之外,更重要的是形成了产业合作的集聚力量、遵循了建设生态的成功模式(见图1.5),从而能实现生态的垄断。20世纪90年代Windows-Intel的组合能够称霸个人计算机(Personal Computer,PC)业界,得益于其在生态方面的成功远远超过技术本身。

总的来说,做出CPU是容易的,难的是做出高端CPU。中国有很多厂商做中低端CPU,例如嵌入式CPU、微控制器CPU,这些是比较容易开发出来的。很多学校计算机专业都讲解CPU原理,稍有能力的本科生都可以做出能够工作的CPU原型。开源社区上能找到很多低端CPU的设计资料,甚至还有很多“自制CPU教程”的图书。

图1.5 软件生态和计算机硬件

但是高端CPU仍然属于IT行业的明珠,在台式计算机、服务器、科学计算中使用的CPU,放眼全球也只有不到10个技术先进的国家能做出来。

第2节 CPU性能论

如果汽车的进步周期能同步计算机的发展周期的话,今天一辆劳斯莱斯仅值100美元,每加仑可跑100万英里。

——Robert X. Cringely,技术作家
[注:1加仑(gal)≈4.5L,1英里(mile)≈1.6km]

龙芯CPU性能提升路线

CPU怎样运行软件?

计算机 = 程序 + 存储

计算机系统由硬件和软件组成。硬件是指物理实体,包括电子设备和机械设备。软件是指在硬件上面存储和处理的信息,本身没有物理实体。

生活中还能找到很多类似的硬件和软件。电视机本身是硬件,而电视机播放的节目是软件。U盘是硬件,而U盘上存储的文档、音乐、电影、游戏是软件。

CPU显然属于硬件,而CPU上运行的程序属于软件。硬件和软件是怎样配合工作的呢?下面以一个最简单的计算机的例子来展示,如图1.6所示,这个计算机的功能为“汉字生成器”,代号为CHN-1型。

图1.6 CHN-1型计算机

存储器(M)保存了连续的二进制编码序列,每一个单元会保存0或1,分别代表要在显示屏上输出的汉字是“关”或“开”。这样的一个二进制单元代表了计算机要执行的一项独立的操作,称为“指令”。多个指令构成一串连续执行的操作,称为“指令队列”,也称为“程序”。

控制器(CC)在一个时钟模块的驱动下工作。时钟模块以一定频率向控制器发出信号,这个频率称为计算机的“主频”。每次这个信号到来时,控制器内部的地址计数器会增加1。地址计数器的内容发送给存储器中的数据选择器,数据选择器会把指令队列中对应该地址的单元内容发送给控制器,并保存在控制器内部的一个存储单元中。控制器内部的存储单元称为“寄存器”。由于从存储器中取出的数据代表指令,因此这个单元称为“指令寄存器”。

运算器(CA)在这台计算机中是一个汉字点阵生成器。控制器把指令寄存器中的内容发送给运算器,运算器根据输入的指令是0还是1,输出对应汉字“关”或“开”的点阵。每个汉字用8×8的点阵来表示,每个点叫作“像素”。运算器的输出是64位二进制数据,保存在控制器的另外一个存储单元中。由于运算器的输出属于计算结果的数据,因此这个单元称为“数据寄存器”。

输入设备(I)包含两个开关。其中一个开关连接着一个固定输出“0”的模块,使用者按下开关后,会把一个常量0输出到控制器的指令寄存器中,覆盖存储器中读出的指令。另外一个开关用于固定输出“1”。这样的输入设备给使用者提供了干预程序运行的手段,作用类似于实际计算机的键盘、鼠标。

输出设备(O)是一个8像素×8像素的汉字显示器,从控制器的数据寄存器中获取64位汉字点阵,根据每一位的0、1值决定每一个像素的亮、灭,表现为汉字的“关”或“开”。

上述5个部件联合工作,使得整个计算机按照时钟频率切换显示器的汉字内容。

CPU由控制器、运算器两部分组成,所运行的软件就是存储器中的指令队列,软件的执行结果体现为计算机显示的汉字信息。如果想要改变计算机显示的汉字信息,只需要修改存储器中的指令队列,而不用修改计算机的硬件,计算机运行模型如图1.7所示。

图1.7 计算机运行模型

虽然这个计算机运行模型极为简单,但是它已经体现出电路硬件怎样存储和执行软件。归根到底,软件无非是0和1组成的序列,而硬件是能够“理解”0和1的数字电路,硬件能够对0和1进行存储、传送、加工,因此软件世界和硬件世界能够衔接起来。

虽然计算机内部使用0和1的二进制,但是在输出到计算机外部时可以转换成方便人类理解的自然表示方式,例如以汉字显示,这样又把计算机世界和人类世界衔接起来了。

这个模型还体现出了冯·诺依曼体系结构的基本思想:计算机 = 程序 + 存储。程序输入计算机中,计算机能够自己指挥自己工作,不再像之前的机器一样需要工人来操作。计算机的出现大幅提升了自动化水平,这是划时代的革命。

主频越高,性能就越高吗?

有很多种方法造出主频低、性能高的计算机

为了正确认识计算机的性能,首先要定义性能的实质含义。性能可以用“计算机在单位时间内完成多少计算量”来衡量。

主频是CPU工作的时钟频率,是计算机的一个重要参数。对于一台计算机来说,主频越高,显然计算机在单位时间内能完成的工作就越多。仍然以前文所述的精简计算机模型CHN-1为例,通过提高时钟模块的频率,可以提升CPU的主频,这意味着汉字切换速度更快。宏观上看,在一段时间内有更多的汉字得到显示。

但是,任何计算机中的主频都不是无限提升的。在晶体管电子计算机中,数据从一个模块传输到下一个模块是需要时间的,运算器中进行的数据加工处理也是需要时间的,计算机运行流程如图1.8所示。所有数据通路上的传输时间,再加上运算器的加工处理时间,决定了执行每一条指令的最短时间,也决定了计算机正常工作的最高主频。如果时钟频率过高,会导致一条指令还没执行完,下一条指令又在等待处理,计算机会进入不可控状态。

图1.8 计算机运行流程

采用更先进的半导体生产工艺,可以提高芯片内晶体管的密度,减少数据传输的最小时延,这是突破最高主频瓶颈的一种方式。

但是主频并不是性能的唯一决定因素。我们同样可以造出一台“主频低、性能高”的计算机CHN-2。工程师可以在以下方面改进设计。

(1)输出设备扩容,能够同时显示4个8像素×8像素的汉字。

(2)存储器中的指令队列扩容,每条指令由1位改成4位,每条指令保存的是4个“开”或“关”命令。

(3)控制器中的指令寄存器也扩容到4位,每次能够从存储器中读取4条指令。

(4)运算器中的汉字点阵生成器扩充为4个,能够同时转换4个汉字的点阵。

(5)控制器中的数据寄存器由64位改为256位,把4个汉字点阵输出到显示器。

改进后的CHN-2计算机有什么优点呢?CHN-1每次显示一个汉字,是“串行”计算机;而CHN-2能每次处理4个汉字,是“并行”计算机,如图1.9所示。CHN-2的主频可以低于CHN-1,例如只有CHN-1主频的1/4,但是在相同时间内CHN-2显示的汉字数量与CHN-1是相同的,所以CHN-2与CHN-1的性能也是相同的,这样就推翻了“主频高的计算机性能一定高”的论断。

上面展示的CHN-2的例子,是通过增加硬件并行度来提升计算性能的典型方法。

图1.9 串行处理和并行处理

需要注意的是,CHN-2性能的提升,是建立在增加成本的基础上的。CHN-2每一条指令包含的汉字数量是CHN-1的4倍,这意味着CHN-2指令包含的内容信息更丰富了,用专业术语说就是“单条指令的语义更强”。CHN-2必须提高各个组成部分的硬件处理能力,包括提高队列容量、增加数据通路宽度、增加加工单元个数,这些都将增加设计难度,也使各个部分的晶体管数量成倍增长。

为什么MIPS和MFLOPS不能代表性能?

单位时间内执行的指令数量不能体现性能

早期的计算机主要用于科学计算,衡量性能的指标有“每秒执行的百万级机器语言的指令数量”(Million Instructions Per Second,MIPS),以及“每秒执行的百万级机器语言的浮点指令数量”(Million Floating-point Operations per Second,MFLOPS)。从定义来看,这两个指标只关注单位时间内执行的指令数量,比较适用于高性能计算机这种计算模式单一的场景。

但是MIPS和MFLOPS的定义有固有的缺陷。不同的计算机中,每一条指令所代表的功能含义是不同的,例如CHN-2的一条指令所显示的汉字信息是CHN-1的4倍。所以单纯用指令数量是无法体现计算机的性能的。

现在MIPS和MFLOPS只在很狭窄的高性能计算机领域得以沿用。

面向问题的性能评价标准:SPEC CPU

性能的真正含义是在更短的时间内解决问题

现在业界更多地采用“面向问题”(Problem-oriented)的性能评价标准。它的基本思想是从实际生活中挑选一些有代表性的计算问题,再在计算机上使用软件解决这些问题。软件运行的时间越短,则计算机的性能越高。

面向问题的性能评价标准屏蔽了计算机本身的硬件参数,不再考虑主频、指令这种实现层面的因素,所得出的结果更符合性能的本质意义——计算机在单位时间内完成多少计算量,因此得到广泛接受。

国际上使用的计算性能测试工具有SPEC CPU,其网站如图1.10所示。这个工具从典型的实际应用中抽取几十个计算问题,涉及的领域有文件压缩、国际象棋求解、有限元模型、分子动力学、大气学、地震波模拟,等等。对每一个问题,使用高级程序语言编写了标准的计算软件,并且规定好输入数据。使用高级程序语言的好处是,软件代码用C语言、Fortran等和CPU无关的语言编写,能够在任何计算机上运行。

图1.10 SPEC CPU网站

在被测试的计算机上,使用编译器对SPEC CPU软件进行编译,并且运行一次,如果计算机得出了正确结果,那么运行时间越短则代表计算机的性能越高。国际知名的CPU企业都会把测试结果提交到SPEC CPU网站上(spec.org),供外界公开查询。

随着计算机的发展,SPEC CPU工具也持续升级,先后在2000年、2006年、2017年推出新版本。例如,早期版本的数据量非常小,在当前的计算机上很快运行就结束了,因此新版本增大了测试集的输入数据量;早期版本只测试一个CPU,而现在的计算机都包含多个CPU,因此后来又支持了多个CPU同时测试;早期版本主要体现CPU计算性能,但是现在的计算机有很多是用在服务器、云计算领域,更关注数据传输性能,因此新版本也增加了CPU与内存、外围设备(简称外设)交换数据的测试因素。

除了SPEC CPU之外,业界还推出了很多其他的测试工具。例如,专门用于访存性能的测试工具STREAM,用来测试CPU对内存的访问速度。这个工具运行时会对内存发起大量数据请求,如果数据在更短时间内传输完成,则代表访存性能更高。其他的测试工具还有针对嵌入式应用的EEMBC,该软件非常简单,数据量很小,很适合在低性能的CPU上测试。

性能测试工具的局限性

完美的测试集不存在

性能测试工具的名称虽然叫作SPEC CPU,但是本质上测试的是硬件和软件的联合性能。SPEC CPU本身是用高级语言编写的,需要经过编译器、操作系统的支持才能运行。现代计算机系统是硬件和软件联合工作,软件也是决定性能的重要因素。

性能测试工具的局限性具体如下。

第一个局限性是编译器对SPEC CPU分值的影响。在同样的CPU上,优化编译器是可以提升软件执行效率的。编译器是把高级语言源代码转换成CPU所能执行的二进制指令的软件。优秀的编译器能够使用更多的优化算法,生成更高效的二进制指令。例如Intel公司自己开发了编译器icc,效率能比开源的编译器gcc高50%以上。Intel公司提交到SPEC CPU网站上的数据都是使用icc编译的,SPEC CPU测试报告如图1.11所示。

图1.11 一份SPEC CPU测试报告,Compiler部分采用Intel公司的C/C++编译器

但是这里有一个矛盾,实际应用中使用更多的是gcc而不是icc,用icc编译应用程序的计算机SPEC CPU分值虽然高,但并不代表用gcc编译的应用软件性能就高。所以有人戏称icc只是为了提高跑分的目的而做的编译器,其结果反映的不是CPU性能而是编译器性能。

第二个局限性是测试工具所选的问题不代表所有应用场景的问题,SPEC CPU分值高并不代表CPU运行所有的应用程序都能有好的效果。SPEC CPU毕竟只包含几十个问题,而且主要是面向计算型应用。为了使SPEC CPU跑分高,完全可以在设计CPU时只注重提高计算性能,例如在CPU中多放置几个浮点计算单元,或者在一个芯片中放置更多的CPU核,同时运行,靠量取胜。

但是这样的CPU用在日常生活中是不合适的,像台式计算机和手机并不处理这么多数值计算应用。就像有的手机运行跑分软件分值非常高,但是运行日常使用的拍照、聊天等应用反而卡顿。

“完美的测试集”只能存在于想象中,用户在使用SPEC CPU时需要清楚地知晓这些局限性,以免被数据误导。

虽然SPEC CPU有诸多不足,但是它目前仍然是衡量计算机性能的最权威工具。无论是修改编译器,还是为了跑分高而在CPU中加入专门的设计,都有“骗测试集”之嫌,但是想把SPEC CPU分值提高到一流水平仍然是需要硬实力的。

不推荐的测试集:UnixBench

使用开源软件时一定要查清它的明显缺陷,避免被其误导

UnixBench是一款测试UNIX操作系统基本性能的开源工具。UnixBench也适合所有兼容UNIX的操作系统的性能测试,例如Linux、FreeBSD等。

UnixBench的主要测试项目有操作系统向应用程序提供的编程接口(系统调用)、程序创建、程序之间的通信、文件读写、图形测试(2D和3D)、数学运算、C语言函数库等。

如果用户在网上寻找操作系统性能测试工具,几乎都会搜索到UnixBench。但是,UnixBench不适合作为性能测试标准,因为这个工具有很大的缺陷。

UnixBench不能体现计算机的实际性能。UnixBench于1995年推出,更新缓慢,2012年之后项目基本停滞。作为计算机UNIX操作系统早期的测试程序,UnixBench测试项目较为老旧,对于当前计算机性能测试的参考意义有限,不适合作为评判指标。

这里仅列举两个UnixBench中问题最大的子项目。

在测试数学运算性能时使用Dhrystone和Whetstone程序。这两种测试不能代表现代高性能CPU的定点和浮点性能,因为程序执行模式过于简单,与实际应用的复杂程度差距大;测试集太小,对于内存的压力几乎没有,而实际应用与CPU、内存的性能都有综合的关系。基于这个原因,业界已经不再使用Dhrystone和Whetstone程序,而是转向更专业的SPEC CPU工具。

在测试图形性能时使用x11perf程序。这种测试使用的是一种老旧的UNIX图像显示机制(x11),而现在的计算机都使用显卡硬件加速机制显示图像,大多数情况下不使用x11的显示机制,所以x11perf分值和计算机的实际图像性能没有直接关系。

龙芯3A4000的UnixBench测试数据如图1.12所示。正如上面所分析的,UnixBench分值不能代表CPU、操作系统的性能。使用UnixBench测试出来的分值会有很大的误导性,真正有意义的测试工具还是SPEC CPU和STREAM。

图1.12 龙芯3A4000的UnixBench测试数据

第3节 人人可学CPU

科学无难事。

——冯·诺依曼(1903—1957)

2020年7月25日,中国科学院大学公布了首期“一生一芯”计划成果,由5位本科生主导完成一款64位芯片设计并实现流片,芯片能成功运行Linux操作系统以及学生自己编写的教学操作系统UCAS-Core

从简单到复杂:CPU的进化

CPU从简单到复杂,是持续70多年的进化过程

CPU的发展和生物进化有相似性,都是从简单到复杂,从低级到高级,从原始到智能。

1946年研制的ENIAC(见图1.13)包含17468个电子管,每秒计算5000次加法,相当于5万人同时做手工计算的速度。以现在的眼光来看当然微不足道,但在当时是很了不起的成就,原来一个需要20多分钟才能计算出来的科学任务,在ENIAC上只要短短的30s,缓解了当时极为严重的计算速度大大落后于实际需求的问题。

图1.13 ENIAC结构框图

1971年Intel推出 Intel 4004(见图1.14),整个CPU集成在一个3mm×4mm的硅芯片上,总共包含2250个晶体管。Intel 4004采用10μm制程,运算速度达到每秒6万次。这样的紧凑体积使CPU不再只是科学家的计算工具,而是可以走向千家万户的计算工具,在台式计算机上工作,这预示了PC时代的开启。

图1.14 显微镜下的Intel 4004电路版图

龙芯3A4000在2019年推出(见图1.15),芯片封装尺寸为37.5mm× 37.5mm,峰值运算速度为128GFLOP/s。龙芯3A4000可以在台式计算机中执行复杂的信息处理工作,包括打字排版、上网、看在线视频、玩3D游戏都游刃有余。龙芯3A4000还可以在服务器、云计算、大数据、人工智能方面做更大规模的数据处理。

CPU的芯片上集成晶体管的密度不断提升。人眼观察Intel 4004的电路版图照片,还能隐约分辨出晶体管的外形轮廓。到龙芯的年代,晶体管的尺寸已经小得难以分辨,只能看出很多晶体管聚集在一起,形成充满了艺术感的色块区域。

CPU的发展主要受三方面动力的驱使:第一是应用需求牵引,科学家需要更快的计算速度,人们需要在CPU上运行更复杂的软件,拉动CPU实现更高性能;第二是生产工艺进步,半导体集成电路技术能够在单位面积上制造更多的计算单元;第三是科学探索的内在动力,科学家、工程师不懈地突破现有水平,追求性能更高、智能程度更高的计算机,最终目标是做出像人一样有智慧的装备。

图1.15 龙芯3A4000电路版图

CPU技术在计算机科学中的地位

CPU是整个计算机中最复杂的模块,是计算机科学的制高点。

计算机科学中主要的原理大部分都涉及CPU。在国际计算机学会(Association for Computing Machinery,ACM)2013年制定的计算机专业的18个知识领域中,涉及计算机本身工作原理的课程都和CPU相关,甚至是以CPU为核心。18个知识领域列举如下。

(1)算法与复杂度

(2)体系结构与组织 *

(3)计算科学

(4)离散结构

(5)图形学与可视化

(6)人机交互

(7)信息保障与安全

(8)信息管理

(9)智能系统

(10)网络与通信

(11)操作系统 *

(12)基于平台的开发

(13)并行和分布式计算

(14)程序设计语言

(15)软件开发基础

(16)软件工程

(17)系统基础

(18)社会问题与专业实践

上面标星号的两个课程都与CPU关联紧密。体系结构与组织主要针对计算机的硬件组成,尤其是以CPU为中心的整个计算机的硬件设计。操作系统是在CPU上运行的软件,操作系统的设计和工作流程也要紧密围绕CPU展开。

经典的计算机体系结构教材,第一节都是讲解CPU的原理,其次才是存储器和输入/输出(I/O)。CPU原理能占整个计算机原理的70%。把CPU讲透,才能明白整个计算机是怎样工作的。在此基础上,设计配套的操作系统,提供一个管理计算机的软件平台,也提供运行上层应用软件的平台。

可以列出这样一个等式:

制作计算机 = 做CPU + 做操作系统

会做CPU、操作系统才代表会“制作”计算机。中国产业界经常称CPU为“电脑之心”、操作系统为“电脑之魂”,很贴切地反映了这两者的地位。

ACM体系中剩下的16门课程,都是在计算机上面开发软件来解决应用问题,可以说只是在“使用”计算机。

我不需要做CPU,为什么还要学习CPU?

CPU思维观察计算机,以CPU视角观察世界

CPU凝聚了许多科学家和工程师的智慧。对CPU原理的学习可以给人们带来多方面的启示。

对于计算机专业人员,学习CPU是掌握计算机原理的必经之路。即使毕业后不进入CPU企业,CPU原理也将在整个职业生涯中如影随形。计算机系统是分层次结构的,从硬件、操作系统到应用软件,有时候为了解决某一层面的问题,往往需要下一层面的知识来解释,否则只能在某一层面工作,知其然而不知其所以然。CPU原理就是整个计算机系统最底层的知识。

对于应用软件开发人员,掌握CPU原理才能开发出更高水平的软件。虽然现在高级语言非常简单易学,但是如果只掌握Java语言、Python语言,那么只能开发出低水平的软件。要开发出高性能的软件仍然是需要底层功力的。软件的算法设计、代码优化都依赖于对CPU原理的深层次理解。

对于其他工程学科人员,可以通过学习CPU来找到相似的设计方法,达到触类旁通的目的。CPU中包含的工程方法对各行业都有启示。例如,CPU中用于提高指令执行效率的流水线结构,用于提高存储器访问速度的缓存设计,用于提高并行计算能力的多核、多线程设计,都可以为设计其他工程产品提供灵感。

即使是绝大多数不从事技术工作的人员,也可以了解CPU的来龙去脉、技术属性、产业地位,以此来更深入地观察和分析信息产业的走向。信息产业影响社会发展的方方面面,CPU在某种程度上可以作为技术发展趋势的“晴雨表”,学习CPU通识课程可以提高自身的洞察力。

对信息时代的每一个人来说,以CPU思维观察计算机,以CPU视角观察世界,就像学习法学、经济学、管理学一样,是一门随时可能用得上的本事。

开源CPU哪里找?

互联网提供了丰富的CPU教学范例

开源运动不断壮大,已经从软件扩大到硬件。现在很多高校、企业、爱好者都在互联网上提供开放的CPU设计资料,可以将其作为学习CPU原理的参考资料。

需要注意的是,毕竟CPU开发成本高,对开发CPU的企业来说包含了可观的人力和知识产权,因此在开源社区上能够找到的主要是简单的入门级CPU,几乎难以找到高端CPU。典型的开源CPU有OpenRisc、RISC-V等,主要面向嵌入式、物联网领域。

少数一些服务器级别的CPU选择开源,也是原开发企业在市场很难做下去的情况下、想保持市场关注度的无奈之举,典型的有OpenSPARC、OpenPOWER等。

相比之下,开源软件的发展水平可以算是高出一大截。以操作系统为例,有Linux这样在全世界的服务器、手机(Android)、嵌入式设备中广泛使用的产品级操作系统,也有Red Hat这样专业维护Linux发行版、提供商业服务的企业。如果不想取得企业的服务,“用操作系统不花钱”已经是一种可以实现的状态。

而在硬件领域,还没有当红的CPU企业敢于这么大方地把桌面、服务器CPU开源。

在这里可以介绍一下全世界最大的开源电路模块网站OpenCores(https://opencores.org),上面有各种类型的开源处理器,数量超过200个,可以作为一个参考资料库,但是近几年更新缓慢,很多项目已经有10多年没有更新了。另外一个大型社区就是Github,里面也有一些CPU设计源代码。搜索关键字“CPU FPGA”可以找到600多个项目,但是这些项目活跃度都很低,其中获得Star评分最高的是一个兼容RISC-V指令集的CPU设计项目,获得了5400个Star[1]。相比Github上随便一个软件组件项目就能获得上万个Star,CPU的开源资源确实是比较薄弱的。

[1] 数据查询时间为2021年9月。

龙芯从2016年推出“面向计算机系统能力培养的龙芯CPU高校开源计划”,将GS132和GS232两款CPU的核心源代码向高校开源,大学老师可以基于龙芯平台设计CPU实验课程(见图1.16),让学生在课堂上有机会设计“真实的处理器”。

图1.16 龙芯CPU高校开源计划配套教学平台

也许在不久的将来,由你开发的CPU能够在开源社区上大放异彩!

相关图书

电子硬件工程师入职图解手册  硬件知识篇
电子硬件工程师入职图解手册 硬件知识篇
RISC-V体系结构编程与实践
RISC-V体系结构编程与实践
Altium Designer 22电路设计与仿真实战从入门到精通
Altium Designer 22电路设计与仿真实战从入门到精通
龙芯嵌入式系统原理与应用开发
龙芯嵌入式系统原理与应用开发
龙芯嵌入式系统软硬件平台设计
龙芯嵌入式系统软硬件平台设计
GPU编程实战(基于Python和CUDA)
GPU编程实战(基于Python和CUDA)

相关文章

相关课程