描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787115297655丛书名: 图灵计算机科学丛书
*权威的计算机体系结构著作
久负盛名的经典作品
《计算机体系结构:量化研究方法(第5版)》是权威的计算机体系结构著作,是久负盛名的经典作品。书中系统地介绍了计算机系统的设计基础、指令集系统结构、流水线和指令集并行技术、层次化存储系统与存储设备、互连网络以及多处理器系统等重要内容。在这个*版中,作者增加了当前炙手可热的云计算和手机客户端技术等相关内容,探讨了在手机、平板电脑、笔记本电脑和其他移动计算设备上云计算的软硬件实现方式。 《计算机体系结构:量化研究方法(第5版)》可作为高等院校计算机专业本科生或研究生教材,也可作为从事计算机体系结构或计算机系统设计的工程技术人员的参考书。
第1章 量化设计与分析基础
1.1 引言
1.2 计算机的分类
1.2.1 个人移动设备
1.2.2 桌面计算
1.2.3 服务器
1.2.4 集群/仓库级计算机
1.2.5 嵌入式计算机
1.2.6 并行度与并行体系结构的分类
1.3 计算机体系结构的定义
1.3.1 指令集体系结构:计算机体系结构的近距离审视
1.3.2 真正的计算机体系结构:设计满足目标和功能需求的组成和硬件
1.4 技术趋势
1.4.1 性能趋势:带宽胜过延迟
1.4.2 晶体管性能与连线的发展
1.5 集成电路中的功率和能耗趋势
1.5.1 功率和能耗:系统观点
1.5.2 微处理器内部的能耗和功率
1.6 成本趋势
1.6.1 时间、产量和大众化的影响
1.6.2 集成电路的成本
1.6.3 成本与价格
1.6.4 制造成本与运行成本
1.7 可信任度
1.8 性能的测量、报告和汇总
1.8.1 基准测试
1.8.2 报告性能测试结果
1.8.3 性能结果汇总
1.9 计算机设计的量化原理
1.9.1 充分利用并行
1.9.2 局域性原理
1.9.3 重点关注常见情形
1.9.4 Amdahl定律
1.9.5 处理器性能公式
1.10 融会贯通:性能、价格和功耗
1.11 谬论与易犯错误
1.12 结语
1.13 历史回顾与参考文献
第2章 存储器层次结构设计
2.1 引言
2.2 缓存性能的10种高级优化方法
2.2.1 种优化:小而简单的级缓存,用以缩短命中时间、降低功率
2.2.2 第二种优化:采用路预测以缩短命中时间
2.2.3 第三种优化:实现缓存访问的流水化,以提高缓存带宽
2.2.4 第四种优化:采用无阻塞缓存,以提高缓存带宽
2.2.5 第五种优化:采用多种缓存以提高缓存带宽
2.2.6 第六种优化:关键字优先和提前重启动以降低缺失代价
2.2.7 第七种优化:合并写缓冲区以降低缺失代价
2.2.8 第八种优化:采用编译器优化以降低缺失率
2.2.9 第九种优化:对指令和数据进行硬件预取,以降低缺失代价或缺失率
2.2.10 第十种优化:用编译器控制预取,以降低缺失代价或缺失率
2.2.11 缓存优化小结
2.3 存储器技术与优化
2.3.1 SRAM技术
2.3.2 DRAM技术
2.3.3 提高DRAM芯片内部的存储器性能
2.3.4 降低SDRAM中的功耗
2.3.5 闪存
2.3.6 提高存储器系统的可靠性
2.4 保护:虚拟存储器和虚拟机
2.4.1 通过虚拟存储器提供保护
2.4.2 通过虚拟机提供保护
2.4.3 对虚拟机监视器的要求
2.4.4 虚拟机(缺少)的指令集体系结构支持
2.4.5 虚拟机对虚拟存储器和I/O的影响
2.4.6 VMM实例:Xen虚拟机
2.5 交叉问题:存储器层次结构的设计
2.5.1 保护和指令集体系结构
2.5.2 缓存数据的一致性
2.6 融会贯通:ARM Cortex-A8和Intel Core i7中的存储器层次结构
2.6.1 ARM Cortex-A8
2.6.2 Intel Core i7
2.7 谬论与易犯错误
2.8 结语:展望
2.9 历史回顾与参考文献
第3章 指令级并行及其开发
3.1 指令级并行:概念与挑战
3.1.1 什么是指令级并行
3.1.2 数据相关与冒险
3.1.3 控制相关
3.2 揭示ILP的基本编译器技术
3.2.1 基本流水线调度和循环展开
3.2.2 循环展开与调度小结
3.3 用高级分支预测降低分支成本
3.3.1 竞赛预测器:局部预测器与全局预测器的自适应联合
3.3.2 Intel Core i7分支预测器
3.4 用动态调度克服数据冒险
3.4.1 动态调度:思想
3.4.2 使用Tomasulo算法进行动态调度
3.5 动态调度:示例和算法
3.5.1 Tomasulo算法:细节
3.5.2 Tomasulo算法:基于循环的示例
3.6 基于硬件的推测
3.7 以多发射和静态调度来开发ILP
3.8 以动态调度、多发射和推测来开发ILP
3.9 用于指令传送和推测的高级技术
3.9.1 提高指令提取带宽
3.9.2 推测:实现问题与扩展
3.10 ILP局限性的研究
3.10.1 硬件模型
3.10.2 可实现处理器上ILP的局限性
3.10.3 超越本研究的局限
3.11 交叉问题:ILP方法与存储器系统
3.11.1 硬件推测与软件推测
3.11.2 推测执行与存储器系统
3.12 多线程:开发线程级并行提高单处理器吞吐量
3.12.1 细粒度多线程在Sun T1上的效果
3.12.2 同时多线程在超标量处理器上的效果
3.13 融会贯通:Intel Core i7和ARMCortex-A8
3.13.1 ARM Cortex-A8
3.13.2 Intel Core i7
3.14 谬论与易犯错误
3.15 结语:前路何方
3.16 历史回顾与参考文献
第4章 向量、SIMD和GPU体系结构中的数据级并行
4.1 引言
4.2 向量体系结构
4.2.1 VMIPS
4.2.2 向量处理器如何工作:一个示例
4.2.3 向量执行时间
4.2.4 多条车道:每个时钟周期超过一个元素
4.2.5 向量长度寄存器:处理不等于64的循环
4.2.6 向量遮罩寄存器:处理向量循环中的IF语句
4.2.7 内存组:为向量载入/存储单元提供带宽
4.2.8 步幅:处理向量体系结构中的多维数组
4.2.9 集中-分散:在向量体系结构中处理稀疏矩阵
4.2.10 向量体系结构编程
4.3 SIMD指令集多媒体扩展
4.3.1 多媒体SIMD体系结构编程
4.3.2 Roofline可视性能模型
4.4 图形处理器
4.4.1 GPU编程
4.4.2 NVIDIA GPU计算结构
4.4.3 NVIDA GPU指令集体系结构
4.4.4 GPU中的条件分支
4.4.5 NVIDIA GPU存储器结构
4.4.6 Fermi GPU体系结构中的创新
4.4.7 向量体系结构与GPU的相似与不同
4.4.8 多媒体SIMD计算机与GPU之间的相似与不同
4.4.9 小结
4.5 检测与增强循环强并行
4.5.1 查找相关
4.5.2 消除相关计算
4.6 交叉问题
4.6.1 能耗与DLP:慢而宽与快而窄
4.6.2 分组存储器和图形存储器
4.6.3 步幅访问和TLB缺失
4.7 融会贯通:移动与服务器GPU、Tesla与Core i7
4.8 谬论与易犯错误
4.9 结语
4.10 历史回顾与参考文献
第5章 线程级并行
5.1 引言
5.1.1 多处理器体系结构:问题与方法
5.1.2 并行处理的挑战
5.2 集中式共享存储器体系结构
5.2.1 什么是多处理器缓存一致性
5.2.2 一致性的基本实现方案
5.2.3 监听一致性协议
5.2.4 基本实现技术
5.2.5 示例协议
5.2.6 基本一致性协议的扩展
5.2.7 对称共享存储器多处理器与监听协议的局限性
5.2.8 实施监听缓存一致性
5.3 对称共享存储器多处理器的性能
5.3.1 商业工作负载
5.3.2 商业工作负载的性能测量
5.3.3 多重编程和操作系统工作负载
5.3.4 多重编程和操作系统工作负载的性能
5.4 分布式共享存储器和目录式一致性
5.4.1 目录式缓存一致性协议:基础知识
5.4.2 目录式协议举例
5.5 同步:基础知识
5.5.1 基本硬件原语
5.5.2 使用一致性实现锁
5.6 存储器连贯性模型:简介
5.6.1 程序员的观点
5.6.2 宽松连贯性模型:基础知识
5.6.3 关于连贯性模型的后说明
5.7 交叉问题
5.7.1 编译器优化与连贯性模型
5.7.2 利用推测来隐藏严格连贯性模型中的延迟
5.7.3 包含性及其实现
5.7.4 利用多重处理和多线程的性能增益
5.8 融会贯通:多核处理器及其性能
5.9 谬论与易犯错误
5.10 结语
5.11 历史回顾与参考文献
第6章 以仓库级计算机开发请求级、数据级并行
6.1 引言
6.2 仓库级计算机的编程模型与工作负载
6.3 仓库级计算机的计算机体系结构
6.3.1 存储
6.3.2 阵列交换机
6.3.3 WSC存储器层次结构
6.4 仓库级计算机的物理基础设施与成本
6.4.1 测量WSC的效率
6.4.2 WSC的成本
6.5 云计算:公用计算的回报
6.6 交叉问题
6.6.1 成为瓶颈的WSC网络
6.6.2 在服务器内部高效利用能量
6.7 融会贯通:Google仓库级计算机
6.7.1 集装箱
6.7.2 Google WSC中的冷却与供电
6.7.3 Google WSC中的服务器
6.7.4 Google WSC中的联网
6.7.5 Google WSC的监控与修复
6.7.6 小结
6.8 谬论与易犯错误
6.9 结语
6.10 历史回顾与参考文献
附录A 指令集基本原理
A.1 引言
A.2 指令集体系结构的分类
A.3 存储器寻址
A.4 操作数的类型与大小
A.5 指令集中的操作
A.6 控制流指令
A.7 指令集编码
A.8 交叉问题:编译器的角色
A.9 融会贯通:MIPS体系结构
A.10 谬论和易犯错误
A.11 结语
A.12 历史回顾与参考文献
附录B 存储器层次结构回顾
B.1 引言
B.2 缓存性能
B.3 6种基本的缓存优化
B.4 虚拟存储器
B.5 虚拟存储器的保护与示例
B.6 谬论与易犯错误
B.7 结语
B.8 历史回顾与参考文献
附录C 流水线:基础与中级概念
C.1 引言
C.2 流水化的主要阻碍——流水线冒险
C.3 如何实现流水化
C.4 妨碍流水线实现的难题
C.5 扩展MIPS流水线,以处理多周期操作
C.6 融会贯通:MIPS R4000流水线
C.7 交叉问题
C.8 谬论与易犯错误
C.9 结语
C.10 历史回顾与参考文献
参考文献
索引
前言
本书的目的
本书到现在已经是第5个版本了,我们的目标一直没有改变,就是要阐述那些为未来技术发展奠定基础的基本原理。计算机体系结构的各种发展机遇总是让我们激情澎湃,不曾有丝毫消退。我们在第1版中就作出过如下的论述:“这个学科不是令人昏昏欲睡、百无一用的纸版模型。不是!这是一个受到人们热切关注的学科,需要在市场竞争力与成本?性能?能耗之间作好权衡,从事这个学科既可能导致可怕的失败,也可能带来显赫的成功。”
在编写第1版时,我们的主要目的是希望改变人们原来学习和研究计算机体系结构的方式。现今,我们感到这一目标依然正确,依然重要。该领域日新月异,在对其进行研究时,必须采用真实计算机上的测量数据和真实示例,而不是去研究一大堆从来都不需要实现的定义和设计。我们不仅热烈欢迎过去与我们结伴而行的老读者,同样也非常欢迎现在刚刚加入我们的新朋友。不管怎样,我们都保证将采用同样的量化方法对真实系统进行分析。
和前几版一样,在编写这个新版本时,我们力争使其既适用于学习高级计算机体系结构与设计课程的学生,也适用于专业的工程师和架构师。与第1版类似,这个版本重点介绍新平台(个人移动设备和仓库级计算机)和新体系结构(多核和GPU)。这一版还秉承了前几版的做法,希望能够通过强调成本、性能、能耗之间的平衡和优秀的工程设计,揭去计算机体系结构的神秘面纱。我们相信这一领域正在日趋成熟,发展成为一门具备严格量化基础的经典理工学科。
关于第5版
我们曾经说过,第4版可能因为转向讨论多核芯片而成为自第1版以来的重要版本。但我们收到了这样的反馈意见:第4版已经失去了第1版重点突出的优点,它一视同仁地讨论所有内容,不分重点和场合。我们非常确信,第5版不会再有这样的评价了。
我们相信,令人激动的地方在于计算规模的两个:以移动电话和平板电脑之类的个人移动设备(PMD)为客户端,以提供云计算的仓库级计算机为服务器。(具有敏锐观察力的读者可能已经看出本书封面上云计算的寓意。)尽管这两个的规模大小不同,但它们在成本、性能和能效方面的共同主题给我们留下了深刻印象。因此,每一章的讨论背景都是PMD和仓库级计算机的计算,第6章是全新的一章,专门讨论仓库级计算机。
本书的另一条主线是讨论并行的所有不同形式。我们首先在第1章指出了两种应用级别的并行,一个是数据级并行(DLP),它的出现是因为有许多数据项允许同时对其进行操作;另一个是任务级并行(TLP),它的出现是因为创建了一些可以独立执行并在很大程度上并行的工作任务。随后解释4种开发DLP和TLP的体系结构样式,分别是:第3章介绍的指令级并行(ILP),第4章介绍的向量体系结构和图形处理器(GPU),这一章是第5版新增加的内容;第5章介绍的线程级并行;第6章通过仓库级计算机介绍的需求级并行(RLP),这一章也是第5版中新增加的。本书中,我们将存储器层次结构的内容提前到第2章,并将存储系统那一章改作附录D。我们对第4章、第6章的内容尤为感到自豪,第4章对GPU的解读是目前详尽、清晰的,第6章首次公布了Google仓库级计算机的细节。
与前几版相同,本书前三个附录提供了有关MIPS指令集系统、存储器层次结构和流水线的基础知识,如果读者没有读过《计算机组成与设计》之类的书籍,可用作参考。为了在降低成本的同时还能提供一些读者感兴趣的补充材料,我们在网络上提供了另外9个附录,网址为:。这些附录的页数之和比本书还要多呢!
这一版继续发扬“以真实示例演示概念”的传统,并增加了全新的“融会贯通”部分。这一版中的“融会贯通”内容包括以下各服务器的流水线组成与存储器层次结构:ARM
Cortex A8处理器、Intel core i7处理器、NVIDIA GTX-280和GTX-480
GPU,还有Google仓库级计算机。
主题的选择与组织
和以前一样,我们在选择主题时采用了一种保守的方法,毕竟这个领域中值得讨论的思想实在太多了,不可能在这样一本主要讨论基本原理的书中将其全部涵盖在内。我们没有面面倶到地分析读者可能遇到的所有体系结构,而是将重点放在那些在任何新计算机中都可能涉及的核心概念上。根据一贯坚持的选材标准,本书讨论的思想都经过深入研究并已被成功应用,其内容足以采用量化方法进行讨论。
我们一直重点关注的内容都是无法从其他来源获取的同类资料,因此我们将继续尽可能讨论比较高级的内容。事实上,本书介绍的有些系统,就无法在文献中找到相关描述。如果读者需要了解更为基础的计算机体系结构知识,可以阅读《计算机组成与设计:硬件/软件接口》(Computer
Organization and Design: The Hardware/Software Interface)一书。
内容概述
这一版对第1章进行了补充,其中包括能耗、静态功率、动态功率、集成电路成本、可靠性和可用性的计算公式。(封二上也列出了这些公式。)在本书后续部分读者能够一直应用这些公式。除了计算机设计与性能测量方面的经典量化原理之外,还对PIAT一节进行了升级,采用了新的SPECPower基准测试。
我们认为,与1990年相比,指令集体系结构扮演的角色有所弱化,所以我们把这一部分内容作为了附录A。它仍然采用MIPS64体系结构。(为便于快速查看,封三汇总了MIPS
ISA相关信息。)网站上的附录K介绍了10种RISC体系结构、80×86、DEC VAX和IBM
360/370,献给ISA爱好者们。
随后,我们在第2章开始讨论存储器层次结构,这是因为很容易针对这些内容应用成本?性能?功耗原理,而且存储器是其余各章的关键内容。和上一版一样,附录B对缓存机制作了概述,以供读者需要时查阅。第2章讨论了对缓存的10种高级优化方法。这一章还介绍了虚拟机,它便于提供保护、进行软硬件管理,而且在云计算中也扮演着重要角色。除了介绍SRAM和DRAM技术之外,这一章还包括了闪存的内容。PIAT示例选择了PMD中使用的ARM
Cortex A8和服务器中使用的Intel Core i7。
第3章主要研究高性能处理器中的指令级并行开发,包括超标量执行、分支预测、推理、动态调度和多线程。前面曾经提到,附录C是关于流水线的一个综述,以备随时查阅之用。第3章还研究了ILP的局限性。和第2章一样,PIAT示例还是ARM
Cortex A8和Intel Core
i7。第3版包括大量有关Itanium和VLIW的材料,现在这些内容放在网上的附录H中,这表明了我们的观点:这种体系结构未能达到过去所宣称的效果。
多媒体应用程序(比如游戏和视频处理)的重要性在提高,因此,开发数据级并行的体系结构也变得更为重要。具体来说,越来越多的人在关注利用图形处理器(GPU)执行的运算,但很少有架构师了解GPU到底是如何工作的。我们决定编写新的一章,主要就是为了揭开这种新型计算机体系结构的奥秘。第4章开始介绍向量体系结构,对多媒体SIMD指令集扩展和GPU的解释就是以此为基础的。(网站上的附录G深入地讨论了向量体系结构。)GPU一节是本书难写的部分,需要多次反复才能给出一个既精确又容易理解的描述。一个重大挑战就是术语。我们决定使用我们自己的术语,然后给出这些术语与NVIDIA官方术语之间的对应关系。这一章介绍了Roofline性能模型,然后用它来对比Intel
Core i7、NVIDIA GTX 280和GTX 480 GPU。这一章还介绍了供PMD使用的Tegra 2 GPU。
第5章介绍多核处理器,探讨了对称、分布式存储器体系结构,考查了组织原理和性能。接下来是有关同步和存储器一致性模型的主题,所采用的示例是Intel
Core
i7。对片上互连网络感兴趣的读者可以阅读网站上的附录F,对更大规模多处理器和科学应用感兴趣的读者可以阅读网站上的附录I。
前面曾经提到,第6章介绍了计算机体系结构中的主题——仓库级计算机(Warehouse- Scale
Computer,WCS)。依靠Amazon
Web服务部门和Google工程师的帮助,本章整合了有关WSC设计、成本与性能的详细资料,而以前了解这些内容的架构师寥寥无几。在开始描述WSC的体系结构和物理实现(及成本)之前,首先介绍了MapReduce编程模型。从成本的角度可以解释为什么会有云计算,以及为何在云中使用WSC进行计算的成本要低于在本地数据中心的计算成本。PIAT实例是对Google
WSC的描述,有些内容是首次公开的。
接下来就是附录A到附录L。
[①]附录A介绍ISA的原理,包括MIPS64,附录K介绍Alpha、MIPS、PowerPC和SPARC的64位版本及其多媒体扩展。其中还包括一些经典体系结构(80×86、VAX和IBM
360/370)和流行的嵌入指令集(ARM、Thumb、SuperH、MIPS16和Mitsubishi
M32R)。附录H与其相关,介绍了VLIW ISA的体系结构和编译器。
前面曾经提到,附录B和附录C是缓存与流水线基本概念的教程。建议对缓存不够熟悉的读者在阅读第2章之前先阅读附录B,新接触流水线的读者在阅读第3章之前先阅读附录C。
附录D“存储系统”包括:进一步讨论可靠性和可用性,以RAID
6方案介绍为主体的RAID教程,非常珍贵的真实系统故障统计信息。接下来介绍了排队理论和I/O性能基准测试。我们评估了一个真实集群Internet
Archive的成本、性能和可靠性。“融会贯通”部分以NetApp FAS6000文件管理程序为例。
附录E由Thomas M. Conte撰写,汇总了嵌入式系统的相关内容。
附录F讨论网络互连,由Timothy M. Pinkston和José Duato进行了修订。附录G初由Krste
Asanovi?撰写,其中详细介绍了向量处理器。就我们所知,这两个附录是其各自相关主题的好材料。
附录H详细介绍了VLIW和EPIC,也就是Itanium采用的体系结构。
附录I详细介绍了大规模共享存储器多处理方面用到的并行处理应用和一致性协议。附录J由David
Goldberg撰写,详细介绍了计算机算法。
附录L将第3版每一章中的“历史回顾与参考文献”部分集中在一起。对于各章介绍的思想,它尽量给予一个恰当的评价,并让读者了解这些创造性思想背后的历史。我们希望以此来展现人类在计算机设计方面的戏剧性发展过程。这个附录还提供了一些参考文献,主修体系结构的学生可能会非常喜欢它们。其中提到了本领域的一些经典论文,如果时间允许,建议读者阅读这些论文。直接听原创者讲述他们的思想,在深受教育的同时,也是一种享受。而“历史回顾”是以前版本中受欢迎的章节之一。
内容导读
所有读者都应当从第1章开始阅读,除此之外并不存在什么的顺序。如果你不想阅读全部内容,可以参考下面这些顺序。
存储器层次结构:附录B、第2章、附录D。
指令级并行:附录C、第3章、附录H。
数据级并行:第4章、第6章、附录G。
线程级并行:第5章、附录F、附录I。
请求级并行:第6章。
ISA:附录A、附录K。
附录E可以随时阅读,但在ISA和缓存序列之后阅读,效果可能会更好一些。附录J可以在涉及运算时阅读。附录L的各部分内容应当在读完正文中相应章节后阅读。
章节安排
我们根据一种统一的框架安排内容,使各章在结构方面保持一致。首先会介绍一章的主题思想,然后是“交叉问题”部分,说明本章介绍的思想与其他各章有什么相互关系。接下来是“融会贯通”部分,通过展示如何在实际计算机中应用这些思想,将它们串在一起。
再下面是“谬论与易犯错误”,让读者从他人的错误中汲取教训。我们将举例说明一些常见误解与体系结构陷阱,要避免犯错是非常困难的,哪怕你明明知道它们就在前面等着你。“谬论与易犯错误”部分是本书受欢迎的内容。每一章都以一个“结语”节结束。
案例研究与练习
每一章的后都有案例研究和练习。这些案例研究由业内和学术界的专家编撰而成,通过难度逐渐增大的练习来探讨该章的关键概念,检验读者的理解程度。教师们会发现这些案例研究都非常详尽和完善,完全可以针对它们设计出一些练习。
每个练习中用尖括号括起的内容()指明了做这道题应该阅读哪部分正文内容。我们这样做的目的,一方面是为了提供复习内容,另一方面是希望帮助读者避免在还没有阅读相应正文的情况下去做一些练习。为了使读者大致了解完成一道题需要多长时间,我们为这些练习划定了不同等级:
[10] 短于5分钟(阅读和理解时间);
[15] 5~15分钟给出完整答案;
[20] 15~20分钟给出完整答案;
[25] 在1小时内给出完整的书面答案;
[30] 小型编程项目:时间短于1整天;
[40] 大型编程项目:耗时2周;
[讨论] 与他人一起讨论的主题。
在textbooks.elsevier.com注册的老师可以得到案例研究与习题的解答。
补充材料
我们还通过网络提供了多种资料,网址为,内容包括:
参考附录——涵盖了一系列高级主题,由相关领域的专家撰写;
历史材料,考察了正文各章所介绍的关键思想的发展形成过程;
供老师使用的PowerPoint幻灯片;
PDF、EPS和PPT格式的书中插图;
网上相关材料的链接;
勘误表。
我们会定期补充新材料和网上其他可用资源的链接。
帮助改进本书
如果你阅读后面的“致谢”部分,将会看到我们已经下了很大的功夫来纠正错误。由于一本书会进行多次印刷,所以我们有机会进行更多的校订。如果你发现了任何遗留错误,请通过电子邮件联系出版商()。
[②]
我们欢迎你对本书给出其他意见,请将它们发送到另一个电子信箱:。
结语
本书仍然是一本真正的合著作品,我们每人编写的章节和附录各占一半。如果没有对方完成另一半工作,如果没有对方在任务似乎无望完成时给予鼓励,如果没有对方点透某个难以表述的复杂概念,如果没有对方花费周末时间来审阅书稿,又如果没有对方在自己因为其他繁重职责而难以提笔时给予宽慰(从简历可以看出,这些职责是随着本书的版本号以指数形式增加的),我们无法想象这本书要花费多长时间才能完成。当然,对于你将要读到的内容,其中若有不当之处,我们也负有同等责任。
John Hennessy
David Patterson
评论
还没有评论。