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

2023-12-04 07:40

本文主要是介绍书评 | 《计算机体系结构》读后感,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

7c5006de53d46d30871cfa93cbee964f.png

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

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

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

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

CPU性能计算

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

7ded400e05a5167b30dde6347e65e2bf.png

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

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

faac5dc1fc587a910375973db273c527.png

其中:

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

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

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

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

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

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

6fcaefc16369cb2ba49662e8def9144d.png

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

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

一些建议

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

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

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

详尽、经典、实战

体系结构奠基作品

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

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

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

d55fcb04eebdbd3eb89d42e6e35c1354.png

近距离审视组成和硬件

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

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

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

对真实系统进行分析

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

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

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

重要概念没有时效性

但此时第 6 版再及时不过

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

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

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

新增专用体系结构

预言体系结构的“重生”

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

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

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

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

传承经典、更新更全

55b427984d5528b22b532a99a78a4b4c.png

49408e478acbd73032050fbb810c2c08.jpeg

相关阅读

0ecfc2a35b218e3c55343b309e4bfba6.jpegf90df29391c7215d4fdf711d708f9879.png

简介

本书讲述了一个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内核和驱动的研发,以及开源操作系统环境的深度定制。

6ee3ab782672813a51bf380b1cce7513.jpeg

这篇关于书评 | 《计算机体系结构》读后感的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452676

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

Python计算机视觉编程 第十章

目录 一、OpenCv基础知识 1.读取和写入图像 2.颜色空间 3.显示图像和结果 二、处理视频 1.输入视频 2.将视频读取到NumPy数组中 三、跟踪 1.光流 2.Lucas-Kanade算法 一、OpenCv基础知识 OpenCV 自带读取、写入图像函数以及矩阵操作和数学库。 1.读取和写入图像 import cv2# 读取图像im = c

2025届计算机毕业设计:如何构建Java SpringBoot+Vue个人健康档案管理系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

计算机毕业设计选题推荐-域名管理系统-域名商城-域名竞拍系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python项目 安卓项目 微信小程序项目 文章目录 一、前言二、开发环境三、系统界面展示四、代码参考五、论文参考六、系统视频结语