书评|《计算机体系结构》读后感

turingbooks turingbooks     2022-12-14     467

关键词:

当我完成《一个64位操作系统的设计与实现》的写作时,本以为熟练地控制处理器便是接触到了处理器的真谛,但当我读完《计算机体系结构:量化研究方法》之后,才知道“星辰大海的波澜壮阔”。因为这本书的两位作者 John L. Hennessy 和 David A. Patterson 是计算机体系结构领域的权威,而这本书被尊称为计算机体系结构领域的“圣经”,下文我就将其简称为“体系结构圣经”。

虽然“体系结构圣经”只有7章,可是每一章所涵盖的信息量非常庞大,涉及计算机科学(软件/硬件)、微电子科学、统计学、物理学等诸多领域的知识。我在阅读每一章的过程中都会感叹自己的知识体系存在不少盲区。

要说“体系结构圣经”的“好”,不得不提一下《计算机组成原理》。尽管《计算机组成原理》一书中已经阐述了计算机是由处理器、缓存、内存、总线、外设等硬件组成,而且清楚、准确地描述了各个器件之间的关系、彼此之间如何连接等;但是关于诸如处理器、缓存该如何配比与选型,这本书却没有提供一套成型的理论——这也是长期以来困扰我的问题之一——虽然知道如何配置处理器的各个寄存器,但是却没有一套方法指导我们如何根据应用场景去合理地规划各个功能模块的特性。

老子曰:“有道无术,术尚可求也。有术无道,止于术。”不夸张地说,“体系结构圣经”可谓有道有术,不仅能帮你指明前方的路,也能帮你走好脚下的路!

接下来,我从CPU性能公式切入,举个简单的例子来分享一下我们该如何阅读这本书。

CPU性能计算

个人认为,“体系结构圣经”这本书最硬核的地方在于提供了一套方法,对处理器的微体系结构进行逐部分的量化分析,进而帮助我们分析出处理器各部分的性能瓶颈。这套方法从性能、功耗、成本、可靠性等多个方面来诠释如何量化地分析计算机的性能。下图根据一款CPU的性能分析结果所绘制,图片来自Brendan Gregg(《性能之巅》作者)博客的一篇介绍CPI火焰图性能分析工具的文章。

图片来源:https://www.brendangregg.com/blog/images/2014/cpi-freebsd-kernel.svg

此图绘制的原理是统计程序运行过程中各函数执行的 CPI(clock cycles per instruction,每条指令的时钟周期数),并将它们以火焰的形式描画出来。以下是 CPI 的计算公式:

其中:

  • CPI:每条指令的时钟周期数——组成与指令集体系结构

  • 程序的 CPU 时钟周期数:执行一个程序所需的时钟周期数——硬件技术与组成

  • 指令数:一个程序所包含的指令数——指令集体系结构和编译器技术

CPI 火焰图是从 CPU 火焰图演变而来,它在 CPU 火焰图的基础上将每个函数的 CPI 大小以红蓝两色填充到每个横条中,红色(指令执行越快颜色越深)代表指令执行(Runing),蓝色(指令执行越慢颜色越深)代表流水线停止(Stalled)。CPU 火焰图是通过监测、采集、统计 CPU 执行的程序的调用栈,并将采样函数和函数的调用栈作为横纵轴绘制的采样效果图。(采样出来的效果图通常与火焰形状相似,故称作火焰图。)

说到流水线的停止,导致停止的因素有很多种,下图是Intel提供的处理器微体系结构示意图,此图自顶向下逐层拆解各主要功能模块的性能瓶颈,这些性能瓶颈问题的分析方法都可以从“体系结构圣经”中找到答案。

现在,我们可以借助性能检测程序(分析工具)直观地判断出函数的性能(基于 CPI 公式),并根据处理器微体系结构(硬件设备)做进一步的性能瓶颈分析。

注:此图源自Intel的《体系结构优化参考手册》

分享案例就结束了,我还想提一点——这本书有不少让人拍案叫绝的“小亮点”。比如,每章都会有一节称为“融会贯通”的内容。顾名思义,它把一章内的知识点全部关联起来,让读者对所有知识点有个连贯和系统的认知,而不是甩出来几个孤零零的概念和冷冰冰的公式,然后留下读者独自在风中凌乱。再比如,各章有专门的“谬论与易犯错误”小节来纠正我们常见的错误观念。关于其他惊喜之处,我这里就不一一展开了,大家可以自行阅读与发现。

一些建议

虽然“体系结构圣经”是一本好书,但它还是有不足的地方,比如说书中一些硬件结构相关的插图,绘制得有些晦涩,要是能再直观一些就更好了。此外,就个人而言,感觉书中的一些数据还不够准确,比如访问Cache的延迟,书中通常给出的数据以纳秒为单位,但是常规CPU DataSheet提供的数据会以Cycle为单位标注Cache的延迟,请详见下图。猜测背后的原因可能是:以纳秒为单位,想必是为了让初学者对Cache的访问延迟有个更直观的理解,毕竟Cycle不是一个明确的时间单位。

注:此图源自Intel的《体系结构优化参考手册》

最后,非常庆幸能有这样一本书将计算机各主要功能模块的性能瓶颈分析方法和性能瓶颈优化方法阐述清楚,希望这本书可以一直更新下去。

详尽、经典、实战

体系结构奠基作品

本书主要讨论促使计算机性能在 20 世纪取得飞速增长的体系结构思想和编译器改进,导致这些剧变的原因,以及 21 世纪体系结构思想、编译器和解释器面临的挑战和富有前景的方法。

书中系统地介绍了计算机系统的设计基础、指令集系统结构、流水线和指令集并行技术、层次化存储系统与存储设备、互连网络以及多处理器系统等重要内容。

另外,本书对近些年火热的云计算、手机客户端技术、人工智能等相关内容也有涉猎。

近距离审视组成和硬件

改变人们学习和研究的方式

十几年前,“计算机体系结构”仅仅指代指令集设计,其他方面的设计就算作“实现”,隐含之意就是,实现方式不太重要……

但本书认为,真正的计算机体系结构是:设计满足目标和功能需求的组成和硬件。其中“组成”包括存储器系统、存储器互连、内部处理器或CPU的设计等。硬件是指计算机的具体实现,包括计算机的详尽逻辑设计和封装技术。

对真实系统进行分析

揭开计算机体系结构的神秘面纱

本书的核心是采用同样的量化方法对真实系统进行分析,这种方法采用的工具包括:程序的经验数据、试验和模拟。

通过强调成本、性能和能耗之间的权衡以及优秀的工程设计,阐述那些为未来技术发展奠定基础的基本原理。上述量化方法对过去的隐式并行计算机是有效的,我们相信它对未来的计算机同样有效。

重要概念没有时效性

但此时第 6 版再及时不过

体系结构利用摩尔定律和登纳德缩放比例定律,构建规模更大、并行程度更高的系统。

而摩尔定律近来因为物理限制和经济因素的共同影响而放缓,登纳德缩放比例定律于 10 年前终结,这对计算机体系结构的影响,与由单核到多核的转变一样深远。

本书第 6 版全面更新,给出了最新的技术发展、成本、示例和参考资料,同时为了跟上开源体系结构的最新发展,书中使用的指令集体系结构更新为RISC-V。

新增专用体系结构

预言体系结构的“重生”

人们早就知道,与通用处理器实现方案相比,定制的领域专用体系结构可以拥有更高的性能、更低的功耗,并且需要更少的硅面积。

但在过去,通用处理器的单线程性能每年提升 40%,而与采用最先进的标准微处理器相比,开发定制体系结构显然需要更多的时间才能上市,从而使定制体系结构的优势丧失殆尽。

而现在,单核处理器的性能提升速度已经非常缓慢,这也就是说,定制体系结构的优势在很长一段时间里都不会因通用处理器而变得过时,甚至永远不会过时。本书用一整章来介绍几种领域的专用体系结构,并提供了实现示例。

久负盛名的权威著作全面升级

传承经典、更新更全

相关阅读

简介

本书讲述了一个64位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。为了凸显64位多核操作系统的特点,物理平台选用搭载着Intel Core-i7处理器的笔记本电脑。与此同时,本书还将Linux内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩于其中,可使读者在读完本书后能够学以致用,进而达到理论联系实际的目的。全书共分为16章。第1~2章讲述了操作系统的基础概念和开发操作系统需要掌握的知识;第3~5章在虚拟平台下快速构建起一个操作系统模型;第6~16章将在物理平台下对操作系统模型做进一步升级、优化和完善。本书既适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。

本书特色

1.基于Intel Core i7处理器的64位多核操作系统 2.引入诸多Linux内核的设计精髓 3.既可在Bochs虚拟机中执行,又可通过U盘引导运行于笔记本电脑

作者介绍

田宇,Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与过多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。

《云计算安全体系》之虚拟化安全读后总结

《云计算安全体系》之虚拟化安全读后总结云计算安全体系之虚拟化安全读后总结虚拟化架构虚拟化安全隐患虚拟化安全攻击虚拟化安全解决方法虚拟化架构之前了解比较少,重点记录下*裸机虚拟化:无需HostOS,hyper... 查看详情

《大道至简》读后感

...代码在这里是不予考虑的。编程实际上是将一件事情交给计算机去做,而编程思想就是我们认为的这件事该如何做。公式中的算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。所以要想编程,首先 查看详情

读后感10)

随着移动互联网的发展智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作工作。计算机以集群的方式存在,按照分布式理论的指导构建出庞大复杂的应用服务,也已经深入人心。本文力求从分布式基础理论,架... 查看详情

《80x86汇编语言程序设计教程》二十五结语(读后感:这本书怎么样)

...理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是《80X86汇编语言程序设计教程》做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学... 查看详情

大道至简读后感

...代码是程序师设计的用来满足客户的要求的,是程序员与计算机交流的媒介,然而程序的最终作用是满足客户的需求,所以程序的作用不仅仅需要满足所有顾客的需求,还需要包括很多连顾客都想不到的情况,所以程序设计者需... 查看详情

构建之法第四章读后感

...来也是没有价值的,首先,软件工程不仅仅就只是涉及到计算机或者软件方面 查看详情

《软件需求》读后感04

今天阅读了第二部分的第8章后部分,第9章和第10章:聆听客户的意见,编写需求文档,需求的图形化分析。需求分析的定位是做什么而不是怎么做,实例图是具有功能性质的,不宜太多或者太细。在第9章学习中,需求文档应该... 查看详情

《云计算安全体系》之虚拟化安全读后总结

《云计算安全体系》之虚拟化安全读后总结云计算安全体系之虚拟化安全读后总结虚拟化架构虚拟化安全隐患虚拟化安全攻击虚拟化安全解决方法虚拟化架构之前了解比较少,重点记录下*裸机虚拟化:无需HostOS,hyper... 查看详情

读后感《大话数据结构》

      良性循环      阅读书籍是在进行理论研究。      只读书而不去实践,就会出现“百无一用是书生”的情况。      基于社会需求的实践... 查看详情

读后感

第一部分:结缘计算机你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?   上大学前不经常接触电脑,包括玩电脑游戏的时间也不... 查看详情

《大道至简》读后感

...内容开始---    首先我先来说我为何选择了计算机这个专业,当初的我对大学的专业一无所知,凭借自己的理解在如此多的专业中选择了计算机。因为我觉得社会越来越科技化,肯定是离不开电脑的,未来的世界肯... 查看详情

《大话数据结构》读后感——第一章

  从上大学开始对数据结构一直处于膜拜观望的状态,很清楚这个东西很重要,但就是学不会,我们学校使用的教材是严蔚敏的数据结构,大家都说这是一本很经典的书,我一直感觉不到它经典到哪,究其原因是看不懂,书中... 查看详情

《大道至简》读后感

...序来满足人们的一些需要,而编程就是将你的想法描述给计算机,用计算机将来代替我们去进行某些运算,这种想法的实现就是运用编程言。用编程语言来传递给计算机,让计算机来代替我 查看详情

《人月神话》读后感

...弹。所以银弹在软件项目中就是比喻这种使得软件成本像计算机硬件成本一样迅速降低的尚方宝剑。但是,近十年来,我们仍未发现银弹的踪迹。没有任何技术或者管理上的进展。但是我们可以从Ada和其他高级编程语言,面向对... 查看详情

《浪潮之巅》读后感

   最近读了这本很精彩的计算机行业的书,对于我这个不是计算机专业的学生来说,这本书很受用。也许是这个计算机技术快速发展的时代吧,电脑、网络走进了千家万户,计算机技术基础成为了每个新时代人的必修... 查看详情

《人月神话》——读后感3

...建,并非一拥而上。要使工作易于管理,必须清晰地划分体系结构设计和实现之间的界线,系统结构师必须一丝不苟地专注于体系结构。总的说来,上述的角色分工和技术是可行的,在实际工作中,具有非常高的效率。  查看详情

读后感

...读了几篇前辈写的文章,里面大体都是告诉我们如何学好计算机。文章从自己是一个IT小白再到后来掌握一个或者多个技能,我总结了一下,学好计算机最根本要掌握专业基础,多动手注重实践。在课堂上学到的仅仅是皮毛,更... 查看详情

《构建之法》读后感第一篇

...软件工程中的“工程”的由来,讲述了软件工程与计算机科学的关系,软件工程的知识领域,强调了软降工程的目标——创建“足够好”的软件等等,告诉我软件开发中应用工程化原则的重要性;软件工程的魅... 查看详情