推荐序
计算机系统是一个耳熟能详的词。但这个词的诞生过程并不简单,它标志着计算机技术发展史上一个重要的里程碑。很长时间,计算机在人们心中就是一台一台机器。从19世纪初巴贝奇设计的差分机,到20世纪40年代的第一台电子计算机ENIAC,在人们的脑海中它们充满了金属、机械、电力这些时代元素。按维基百科的词条定义,计算机就是数字电子机器(digital electronic machine)。
从何时起,“计算机”这3个字后面加上“系统”两个字,出现了“计算机系统”这个词?这个问题其实并没有确切的答案,我便自己尝试着做了一个不严谨的考据。仍从维基百科的词条出发,按其定义,计算机系统是包含硬件、软件和外设的完整计算机(complete computer)。我们知道,早期计算机很珍贵,软件只是硬件的附属品。因此,什么时候开始软件能与硬件平起平坐,不再附属于硬件,便是一个重要的线索。
我们可以把这个时间点指向IBM System/360诞生的20世纪60年代。1964年,IBM推出了System/360系列大型机,彻底改变了计算机的发展趋势。在此之前,软件是与硬件绑定的,只能在一种计算机上运行。但System/360使用了兼容的概念,使得一个软件在不同型号的计算机上都能运行。从此,软件不再附属于计算机硬件,软件得到了解放,成为一种产品,最终形成一个新的产业。
20世纪60年代是人们真正认识到计算机系统重要性的年代。1960年,IBM成立了系统研究所(System Research Institute),并专门设置了“系统工程师”(System Engineer)岗位;1962年,IBM System Journal创刊,并在1964年发表了一期System/360专题文章……计算机系统这个词,从此开始深入人心。计算机系统的核心在于硬件与软件的协同。
计算机硬件核心部件在过去半个多世纪持续高速发展,尤其是处理器芯片,得益于摩尔定律,一直处于指数增长模式。20世纪60年代还在为每秒完成3万余次运算的System/360喝彩的人们也许根本无法想象今天一颗邮票大小的硅片上能集成近千亿个晶体管,能达到每秒几十万亿次双精度浮点运算的性能。
然而,这些晶体管的性能得到充分利用了吗?2020年麻省理工学院的一个科研团队在Science上发表了一篇名为“There’s Plenty of Room at the Top”的文章,给出了他们的答案:显然没有。他们开展了一个小实验:假设用Python实现一个矩阵乘法的性能是1,那么用C语言重写后性能可以提高50倍,如果能再充分挖掘硬件体系结构特性(如循环并行化、访存优化、单指令多数据流等),那么性能可以提高63000倍!这种跨层的软硬件协同优化存在巨大的潜力可被挖掘。
遗憾的是,真正能如此深入理解硬件体系结构、发挥硬件优势的软件开发人员依旧凤毛麟角。同样,真正能把握应用软件需求与特征并掌握操作系统运行机制的芯片研发人员也极其稀缺。但是,当前国内高校的教学体系在软硬件协同方面仍然存在一条鸿沟。虽然国内几乎所有高校都有计算机系,但大多数教学侧重软件与应用层面,即使开设与硬件体系结构相关的课程,也缺少系统的实践训练。虽然近年来国内许多高校兴办集成电路学院,但大多数课程侧重微电子,很少开设体系结构课程,更不用说操作系统这样的系统软件课程。很难想象这些学生毕业后能直接参与到处理器芯片架构、核心系统软件的设计与开发,但这种既懂硬件又懂软件的人才正是国内业界非常紧缺的。
过去几年,我们在中国科学院大学启动“一生一芯”计划,希望能为解决这种人才困境做一些贡献。“一生一芯”计划是一个实践课程,目标是让学生设计实现一款可运行操作系统的处理器芯片并完成流片,旨在让学生通过实践打通“程序→库→操作系统→指令→微结构→电路→晶体管”的知识与技能链条。目前“一生一芯”计划已经拓展到面向全国高校的学生,在第四期中,已有来自200多所高校的1100多位学生报名。
很惊喜地发现本书与“一生一芯”计划秉持相同的理念,并覆盖更宽广的领域,从底层的通用处理器架构、Linux内核与开发工具、OpenCL编程一直到上层的人工智能软件框架与应用。在我的印象中,国内关注基础概念、基本原理的图书已经不少,但这样侧重软硬件贯通的实战型技术类图书仍然很少。在我看来,这是一本难得的计算机系统领域的“实战手册”,可以帮助广大从业人员提升计算机系统实战技能,而这是在产业界所迫切需要的。
包云岗
中科院计算所研究员、副所长