第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个知识领域列举如下。

上面标星号的两个课程都与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能够在开源社区上大放异彩!