序言1
“计算机体系结构”是计算机科学技术学科中计算机专业的一门专业必修课程。该课程的目标是培养计算机系统设计的专门人才,使其掌握计算机系统设计必须具备的专业知识,以及具有系统设计、分析、集成和评价的能力。
本书紧紧围绕“计算机体系结构”课程目标进行组织,主要内容分为4个部分: ①计算机体系结构基础内容,包括计算机体系结构的研究内容和发展趋势、二进制和逻辑电路、指令系统结构等; ②指令流水线结构,包括静态指令流水线、动态指令流水线、多发射指令流水线等; ③处理器的模块级结构,包括转移猜测、运算部件、高速缓存、存储管理等; ④多处理器结构,包括多处理器结构分类、多处理器系统的访存模型、存储一致性协议、cache一致性等。
本书的一大特色是由我国从事自主通用CPU设计的一线科研人员撰写,从一个CPU设计者的角度出发,强调内容选择的基础性(要了解体系结构背后的原理和思路)、体系结构设计者需要具备知识的系统性(要做到“上知天文,下知地理”)、体系结构设计的实践性(要做work on silicon的设计)。
本书作者胡伟武研究员是我国自主通用龙芯CPU的总设计师,他在中国科学技术大学读本科时就研制开发了能够运行8086指令集的处理器,2002年曾研制出我国首款高性能通用处理器龙芯1号,之后陆续研制出龙芯2号和龙芯3号处理器等,在处理器设计方面具有丰富的理论知识和工程经验。
胡伟武研究员的人生目标之一就是为我国培养更多的掌握CPU设计技术的高端人才,使我国在高端CPU方面不受制于人。为此,他坚持在繁忙的龙芯处理器研制工作之余,在中国科学院研究生院讲授“计算机体系结构”课程,本书的出版将是他实现其人生目标的开始,也将对我国计算机科学技术的学科建设以及高素质的人才培养起到积极的推动作用。
陈国良
中国科学院院士
中国科学技术大学
序言2
本书具有两个鲜明的特点: 内容精练而实用,表述清楚而易懂。
作者花了很多心血反复筛选和提炼内容,讲授了二进制电路、指令系统、静态/动态流水线、高速缓存、存储管理、多处理器等计算机体系结构的基础知识,这些基础性的知识是“计算机体系结构”课程所必须讲授的基本内容。学生掌握了这些内容以及背后的原理,也就掌握了计算机体系结构的基本知识,为今后的研究、设计、工程实现、应用等工作奠定了坚实的基础。
本书涵盖了从系统软件支持到集成电路工艺实现的基本知识。比如,学懂了本书内容的学生,对存储管理而言,自己就能够从操作系统支持、体系结构设计到版图级工艺实现,理出一条基本的脉络。
在学习过程中,精读本书的内容,加上与本书配套的课程作业和动手动脑实践,可能比阅读几本翻译过来的冗长的国外教科书更有助于理解和掌握“计算机体系结构”的基本知识。本书比国外教科书更适合作为一学期的“计算机体系结构”课程教材。
“计算机体系结构”是一门比较难的必修课,一个原因是该领域里的创新多而杂,使得很多教科书变得冗长,尤其是国外原版书,往往有近千页的篇幅。本书的写作,从内容提炼、谋篇布局、概念表达到语言风格,都花费了很多心血,以求在近三百页的篇幅中清楚地表述出“计算机体系结构”的基本知识,使得全书内容可以在一学期之内讲完。
本书在布局上,特别强调循序渐进。例如,在讲述指令流水线这个计算机体系结构的核心内容时,先讲静态流水线(高速路),后讲动态流水线(可超车),再讲多发射(多车道)。本书中的概念和原理都有对应的具体的实例,避免了一些教科书中存在的概念和原理陈述空洞的缺点。本书全篇使用了“授课型”语言,使得其内容更通俗易懂。
本书还是一本历经了十余年实践检验的教科书,凝聚了作者多年来研制龙芯处理器的科研和工程实践经验以及多年在中科院研究生院授课的实践经验。
自1978年走进大学校门以来,我读过上百部《计算机体系结构》教科书。但读完这本《计算机体系结构》,我体会到了本书写作风格的最大特点: 它是以第一人称方式写成的。以第一人称方式写出的计算机科学技术领域的教科书,我还是第一次看见。第一人称写作方式缩短了作者与读者、教师与学生的距离,体现了作者的承诺。
中科院计算所正在与高校和出版社合作,以龙芯和LAMP等开放式平台为基础,构建计算机体系结构二级学科的精品课程。《计算机体系结构》的出版,为这项战略性工作奠定了一块基石,也为我国“计算机体系结构”的教学提供了一部高质量的、实用的教科书,对于推动我国计算机科学技术学科的建设和加快高质量人才的培养计划,都具有现实意义。
徐志伟
中国科学院计算技术研究所
前言
2002年初,我刚开始龙芯处理器的研制没多久,中科院计算技术研究所负责研究生教育的徐志伟老师就找我说有没有可能在计算技术研究所开设一门计算机系统结构方面的“大课程”。他进一步解释说,在国外很好的学校经常有这样的课程,让学生每天都忙得“死去活来”,熬夜到凌晨两三点才能完成作业,但从中还“真正能学到东西”。我便欣然应允。
我从2002年秋季开始给计算技术研究所博士生开设“处理器设计”课程,讲课后才知道给学生上课比做研究难。一方面是因为授课比做研究在内容上要求更加全面系统,尤其是讲体系结构课程,除了体系结构本身外,还需要对操作系统、编译器原理、晶体管原理和基本工艺流程等相关领域的知识融会贯通;另一方面做研究时很多内容只要宏观了解就可以了,但授课就必须对其搞清楚,不清楚就不敢讲或者讲起来不生动。例如,在龙芯处理器设计时我安排了专门的人负责浮点模块,因为自己对于IEEE的浮点数据格式标准只是大致了解,但要给学生讲自己就得搞清楚;又如,在讲TLB时,就得搞清楚操作系统的存储管理,否则越讲学生就越糊涂。基于上述原因,这门课程几乎花掉了我前3年的所有业余时间,每一讲都至少需要花一周的时间做准备,而且每一年都要对讲义做大幅度调整,成为一个沉重的负担。经过3年的积累,课程的章节框架才基本定型。
在此基础上,2005年开始在中国科学院研究生院同时针对硕士和博士讲授“高性能计算机系统结构”课程。硕士和博士课程的主要区别在于作业和考试内容不同。由于要针对硕士讲授,因此在基础性方面又做了补充和加强,并根据授课的实际需要每年再对各章的内容进行了调整和完善。到2008年,准备根据讲课的内容出版一部教材,因此对2008年的讲授进行了录音整理。为了增加教材的可读性和趣味性,在整理教材时保持了第一人称的形式,同时尽量做到句子及内容的简洁和严谨。
本教材具有如下几个特点。
一是基础性,在快速变化的体系结构学科中总结出其中不变的原理性东西。计算机体系结构发展得很快,不断有新的内容出现,但几十年来积淀下来的东西并不多。关键是要发现快速变化中不变的原理性的东西,如果掌握了这些原理,就能以不变应万变。因此,在教材编写时“不赶时髦”且“不跟风”,把计算机体系结构在几十年的发展过程中形成的里程碑的工作讲透,重点介绍具体结构背后的原理和思路。
二是系统性,做到对体系结构、基础软件、电路和器件的融会贯通。根据我自己从事处理器设计的经验,一个体系结构的设计者就像一个带兵打仗的将领,结构设计就是“排兵布阵”。更重要的是要“上知天文,下知地理”。所谓“上知天文”,指的是在结构设计过程中要充分地了解与处理器联系紧密的操作系统、编译器以及应用程序的原理和行为;所谓“下知地理”,指的是在做结构设计时要充分考虑到所设计的模块和功能部件的电路和版图结构。要做到一以贯之。例如在打字时,要很清楚地知道从按键盘到屏幕上出现一个字的过程中应用程序、操作系统、硬件、芯片、晶体管等的完整的交互行为。
三是实践性,做“在硅上工作(work on silicon)”的设计。在龙芯处理器的研发中深刻感觉到,计算机体系结构是实践性很强的学科。因此,在本教材的内容中充分结合了龙芯处理器研发过程中获得的体验,强调要做work on silicon的设计,而不要停留在work on paper的设计上。本教材的最后一章“实践是最好的课堂”,通过龙芯研制过程中发生的10个故事来进一步强调学习计算机体系结构设计实践的重要性。此外,在教材的习题部分安排了不少需要学生动手实践的内容。这些习题是对内容的延伸,需要学生在领会教材内容的精神之后进行发挥。
由于体系结构这门学科发展迅速,涉及面广,因此本教材中难免有不当和疏漏之处,敬请批评指正。同时我也意识到,以活泼生动的形式编写教材是一种大胆的尝试,需要面临很多挑战。因此,非常欢迎使用本教材的教师和学生对本教材提出宝贵意见。
胡伟武
2017年暑期前言计算机体系结构(第2版)