Main 计算机组成与设计:硬件软件接口

计算机组成与设计:硬件软件接口

,
0 / 0
How much do you like this book?
What’s the quality of the file?
Download the book for quality assessment
What’s the quality of the downloaded files?
《计算机组成与设计:硬件/软件接口(原书第5版)》是计算机组成与设计的经典畅销教材,第5版经过全面更新,关注后PC时代发生在计算机体系结构领域的革命性变革——从单核处理器到多核微处理器,从串行到并行。本书特别关注移动计算和云计算,通过平板电脑、云体系结构以及ARM(移动计算设备)和x86(云计算)体系结构来探索和揭示这场技术变革。

与前几版一样,本书采用MIPS处理器讲解计算机硬件技术、汇编语言、计算机算术、流水线、存储器层次结构以及I/O等基本功能。

《计算机组成与设计:硬件/软件接口(原书第5版)》特点

更新例题、练习题和参考资料,重点关注移动计算和云计算这两个新领域。

涵盖从串行计算到并行计算的革命性变革,第6章专门介绍并行处理器,每章中都涉及并行硬件和软件的相关主题。

全书采用Intel Core i7、ARM Cortex-A8和NVIDIA Fermi GPU作为实例。

增加“运行更快”这一新实例,说明正确理解硬件技术的重要性,它能使软件性能提高200倍。

讨论并强调计算机体系结构的“8个伟大思想”——通过并行提高性能、通过流水线提高性能、通过预测提高性能、面向摩尔定律的设计、存储器层次、使用抽象简化设计、加速大概率事件和通过冗余提高可靠性。
Categories:
Year:
2015
Edition:
5th
Publisher:
机械工业出版社
Language:
chinese
Pages:
536 / 557
ISBN 13:
9787111504825
Series:
计算机科学丛书
File:
PDF, 153.37 MB
Download (pdf, 153.37 MB)

You may be interested in Powered by Rec2Me

 

Most frequently terms

 
1 comment
 
pee
egjdfguiqwrhfdkbjhqwojfkbdnsghuodbjkvgsohuejkbfjuigsfhjkdfhiekdbhsgrtwksbhfiweskdbn
08 May 2021 (17:02) 

You can write a book review and share your experiences. Other readers will always be interested in your opinion of the books you've read. Whether you've loved the book or not, if you give your honest and detailed thoughts then people will find new books that are right for them.
1

Have Black Lives Ever Mattered?

年:
2017
语言:
english
文件:
PDF, 1.12 MB
0 / 0
2

Livret de calcul. Kabu tiiraa

年:
1997
语言:
somali
文件:
PDF, 1.12 MB
0 / 0
书

丛

学

机

算

计

尸
1 l
-

科

I

计符机组成勹设计
硬件/软件接口
,,奴针t A. 1j1(1 牛.tJ f,术 I Da,icl .\. Patterson I~勺 1忖}

L. ·>尼斯 I .John L~knnl'\ 、 ~ I

!tlr JII_f/,\ 人];

J丿11·HI J、•'? 仆'1~'lt、IJ;H父

I党 ~'Ii'.),I移[1\i'1, 安建峰
曲,It I 业人学

'·S if

.
C oiuµtiter {)rg~皿·Z:.1t&OH

:.1Hd Ot' 、; tgH

吓,-: [~"-、
.i.!:"d\ l、 i.l:·,_·.,Ult'人;- !;"1_'! !1'.•_、: '.a•~、 1:·

! I1'1_!; [

订

COMPUTER
n D r.. A t\.11 7 AT I n t\.l
!k ORGANIZATION
AND DESIGN

'}

,`

nAV1n A PATTFRSON
丿OHN L HENNESSY

.Ji:心 i(•j 、,

“名

[X、 l

画

.".贼嘈兰野l

计纾机组成忖设计硬件/软件接口 原书第 5版
Computer Organization and Design

The Hardware/Software Interface Fifih Edition

这是一本应该保存在书架上的计并机体系结构的教材

本书既陈旧又祈颖.因力它不但介绍了基本原理

摩尔定律、抽彖、加速大概卒事件、冗余、存储器层次、并行和,无水线 , 也使用如 A R M C:nr叭 A~ 和 l 11td C:o,飞 17
等现代设计对这些基本原理进行 了 说明

Mark D . Hill, 威斯 Lli!1t 大学幻迪逊分校 il·n 机科学系教授系 i仕
教材的选择足一个非常令 人 1且丧的折衷过程一教学方志、内谷的设盖面、行文造句的质'也描土的村确程
度、成本等都宙要考虑

这是一本不需要在这些方面进行折衷且,步及各个方面的书

它不仅是一 邻计并机组成的

教科书 , 也是所有计并机科学教科书的范本

Michael Gold we her, Xavier k 学计饥机科学系教投
马前,半导体加工工艺按比例缩小的困难是系统功耗的限卧 . 在移动系统和大 牧据处理器愤块 . 该限制与下

断增长的性能由求之间的矛盾越未越尖钮

对该矛盾而必须在设计方面供的修改

第 5 版除了力读者提供计且机体系结构的介绍 , 还力读者准备了力且

在这个计并技术的新领城 . 必须进行软硬件协同设计.另外 .

系统级体系

结构化化与部件级优化 一 样重要

Christors Kozyrakis , 斯儿 !/-i,ik 学电 r-r 和和 ii 钉机科学系副教授
本书是计算机组成与设计的经典畅销教材,第 5版经过全面更新,关注后 PC 时代发生在计算机体系结构领域
的革命性变革一从单核处理器到多核微处理器,从串行到并行 。 本书特别关注移动计算和云计算,通过平板电
脑、云体系结构以及 ARM (移动计算设备)和 x86 (云计算)体系结构来探索和揭示这场技术变革 。
与前几版一样,本书采用 MIPS 处理器讲解计算机硬件技术、汇编语言、计算机算术、流水线、存储器层次
结构以及 1/0 等基本功能 。

本书特色
• 更新例题 、 练习题和参考资料,重点关注移动计算和云计算这两个新领域 。
• 涵盖从串行计算到并行计算的革命性变革,第 6 章专门介绍并行处理器,每章中都涉及并行硬件和软件的相关
主题 。
. 全书呆用 Intel

Core i7, ARM Cortex A8 和 NV I D I A Fermi GPU 作为实例 。

• 增加“运行更快”这一新实例,说明正确理解硬件技术的重要性,它能使软件性能提高 200倍 。
. 讨论并强调计算机体系结构的 "8 个伟大思想”一—通过并行提高性能、通过流水线提高性能、通过预测提高

性能、面向摩尔定律的设计、存储器层次、使用抽象简化设计、加速大概率事件和通过冗余提高可靠性 。

• 访问本书配套网站 (textbooks . e l sevier.com/9780 1 24077263) 可获取更多资源,包括深入学习所需的高级内
容 、 附录、术语表、参考文献以及推荐阅读材料 。

S
I

Organization
and Design: The Hardware/Software
Interface, Fifth Edition

481
8 7
97
1 8
I BN
2
2
1
-5
。

并 由 El sevi er授权出版

11151

上架指导: 计 算 ; 机\计 汀机组成

本书译自原版 Computer

—

E区EV兀R
爱息唯尔

77

1

5L8 5 >
。

9

[美]

戴维 A. 帕特森 (Da啦 ,A.P血enc圃)约翰 L 亨尼斯(如an L. Hennessy)

加州大学伯克利分校 已

王党辉康继昌安建峰
西北工业大学

斯坦福大学

著

等译

Computer Organ比ation and Design 心. ,,
The Hardware/Software Interface Fifth Edition

COMPUTER
0 RGAN IZAT'ION
AN D · E5 I GN

•

THE HARDWARE/SOFTWARE INTERFACE

图书在版编目 (CIP) 数据
计算机组成与设计:硬件/软件接口(原书第 5 版)/(美)帕特森 (Patterson, D. A.), (美)
亨尼斯 (Hennessy ,

J.

L.) 著;王党辉等译 . 一北京:机械工业 出版社, 20 1 5.6

(计算机科学丛书)
书名原文: Comp uter Organization and Des ign : The Hardware/Software Interface,

Fifth Edition
ISBN 978-7 -111- 50482 - 5
I. 计…

II. 心帕 …

@亨...

® 王. . .

III. 计算机体系结构

IV. TP303

中国版本图书馆 C IP 数据核字 (20 1 5) 第 127169 号

、 本书版权登记号:图字: 01-2014-2856

Computer Organization and Design: The Hardware/Software Interface, Fifth Edition
David A. Patterson and John L. Henne ssy
ISBN:978-0-12-407726-3
Copyright © 2014 by Elsevier Inc. All rights reserved .
Authorized Simplified Chinese translation

ed 山 on

published by the Proprietor.

Copyright © 2015 by Elsevier (S ingapore) Pte Ltd. All rights reserved.
Pri nted in China by China Mac hi ne Press under special arrangement with Elsevier
(Singapore) Pte Ltd . T hi s editio n is aut hori zed for sa le in China onl y, excluding Hong Kong
SAR, Maca u SAR and Taiwan. Unauthor ized export of this edition is a vio lation of the
Copyr ig ht Act. Violation of this Law is
本书简体中文版由 Elsevier

s u 切 ect

to Civil and Criminal Penalties.

(Singapore) Pte Ltd.

授权机械工业出版社在中国大陆境内独家出版

和发行 。 本版仅限在中国境内(不包括香港特别行政区 、 澳门特别行政区及台湾地区)出版及标价销售 。
未经许可之出口,视为违反著作权法,将受法律之制裁。

本书封底贴有 El sevier 防伪标签,无标签者不得销售 。
本书是计算机组成的经典教材,着眼千当前计算机设计中最基本的概念,详细展示软硬件间的关
系,介绍当代计算机系统发展的主流技术和最新成就 。

本书以 MIPS 处理器为例介绍计算机硬件技术、汇编语言、计算机算术、流水线以及存储器层次结
构等基本技术 。 书中强调从串行处理到并行处理的最新革新,每章中都包含并行硬件和软件的主题,以

软硬件协同设计发挥多核性能为最终目标 。 另外,本版与时俱进地使用了如 ARM Cortex A8 和 Inte l
Core

i7 等现代设计来说明计算机设计的基本原理。

本书适合作为高等院校计算机专业教材,对广大技术人员也有很高的参考价值。

100037)

出版发行 : 机械工业出版社 ( 北耟行西城区百万庄大街 2 2 号

邮政编码

责任编辑 : 姚蕾

责任校对:殷虹

印

版

刷:北京诚信伟业印刷有限公司

开本:
书号 :

185mm x 260mm 1/16
ISBN 978-7-111-50482 - 5

次 : 2015 年 7 月第 1 版第 1 次印刷

印张:

34.5

定价: 99.00 元

凡购本书,如有缺页 、 倒页 、 脱页,由本社发行部调换

客服热线:
购书热线 :

(010) 88378991 88361066
(010) 68326294 88379649 68995259

版权所有·侵权必究
封底无防伪标均为盗版

本书法律顾问:北京大成律师事务所

韩光/邹晓东

投稿热线:
读者信箱:

(010) 88379604
hzjsj@hzbook.com

1 出版者的话
Computer Organization and Design: The Hardware/Software Interface

文艺复兴以来,源远流长的科学精神和逐步形成的学术规范,使西方国家在自然科学的各

个领域取得了垄断性的优势;也正是这样的优势,使美国在信息技术发展的六十多年间名家辈
出、独领风骚 。 在商业化的进程中,美国的产业界与教育界越来越紧密地结合,计算机学科中
的许多泰山北斗同时身处科研和教学的最前线,由此而产生的经典科学著作,不仅擘划了研究
的范畴,还揭示了学术的源变,既遵循学术规范,又自有学者个性,其价值并不会因年月的流
逝而减退 。

近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益
迫切 。 这对计算机教育界和出版界都既是机遇,也是挑战;而专业教材的建设在教育战略上显
得举足轻重 。 在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的
几十年间积淀和发展的经典教材仍有许多值得借鉴之处 。 因此,引进 一 批国外优秀计算机教材
将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流
大学的必由之路 。
机械工业出版社华章公司较早意识到“出版要为教育服务” 。 自 1998 年开始,我们就将工
作重点放在了遴选、移译国外优秀教材上 。 经过多年的不懈努力,我们与 Pearson, McGraw即1, Elsevier, MIT, John Wiley & Sons, Cengage 等世界著名出版公司建立了良好的合作关系,
从他们现有的数百种教材中甄选出 Andrew S. Tanenbaum, Bjarne Stroustrup, Brain W. Kernighan,

Dennis Ritch比, Jim Gray, Afred V. Aho, John E. Hopcroft, Jeffrey D. Ullman, Abraham Silberschatz,
William Stallings, Donald E. Knuth, John L Hennessy, Larry L. Peterson 等大师名家的一批经典作
品,以“计算机科学丛书”为总称出版,供读者学习、研究及珍藏 。 大理石纹理的封面,也
正体现了这套丛书的品位和格调 。
”计算机科学丛书”的出版工作得到了国内外学者的鼎力相助,国内的专家不仅提供了中
肯的选题指导,还不辞劳苦地担任了翻译和审校的工作;而原书的作者也相当关注其作品在中

国的传播,有的还专门为其书的中译本作序 。 迄今,”计算机科学丛书”已经出版了近两百个
品种,这些书籍在读者中树立了良好的口碑,并被许多高校采用为正式教材和参考书籍 。 其影
印版“经典原版书库”作为姊妹篇也被越来越多实施双语教学的学校所采用 。

权威的作者、经典的教材、一流的译者、严格的审校 、 精细的编辑,这些因素使我们的图
书有了质量的保证 。 随着计算机科学与技术专业学科建设的不断完善和教材改革的逐渐深化,
教育界对国外计算机教材的需求和应用都将步入一 个新的阶段,我们的目标是尽善尽美,而反
馈的意见正是我们达到这 一 终极目标的重要帮助 。 华章公司欢迎老师和读者对我们的工作提出
建议或给予指正,我们的联系方法如下:
华章网站 : www.hzbook. com
电子邮件: hzjsj@ hzbook. com
联系电话:

(010) 88379604

联系地址:北京市西城区百万庄南街 1 号

邮政编码: 100037

=
Ii
l'lrf:而
华章教育

华章科技图书出版中心

1 本书赞誉 1
Computer Organiz.ation and Design: The Hardware/Software Interface

教材的选择是一个非常令人沮丧的折衷过程一--教学方法、内容的覆盖面 、行 文造句的质

量、描述的精确程度、成本等都需要考虑 。 这是一本不需要在这些方面进行折衷且涉及各个方
面的书 。 它不仅是一部计算机组成的教科书,也是所有计算机科学教科书的范本 。

— Michael Goldweber,

Xavier 大学

从第 1 版开始,我已经使用本书很多年了 。 第 5 版在现有的经典内容上做了显著的改进 。
从桌面计算到移动计算再到大数据,技术的发展开辟了新的研究领域,包括 ARM 之类的嵌入
式处理器、软件和硬件如何进行交互以提高性能以及云计算等,这些在本版中都有所体现,且

没有牺牲基础知识的内容 。

— Ed Harcourt,

St. Lawrence 大学

这是一本应该保存在书架上的计算机体系结构的教材 。 本书既陈旧又新颖,因为它不但介
绍了基本原理——摩尔定律 、 抽象、加速大概率事件、冗余、存储器层级 、并行 和流水线,也
使用如 ARM Cortex A8 和 Intel Core i7 等现代设计对这些基本原理进行了说明 。

— Mark D. Hill,

Wisconsin- Madison 大学

第 5 版与先进嵌入式和众核 (GPU) 系统的发展保持同步,它们的发展使平板电脑和智能

手机很快变成新的桌面电脑 。 本书展示了这些变化,并提供了丰富的计算机组成与设计的基本
原理,这些内容对于这类新型设备和系统的软硬件设计人员来说非常有用 。

— Dave Kaeli,

Northeastern 大学

当前,半导体加工工艺按比例缩小的困难在于系统功耗的限制,在移动系统和大数据处理
器领域,该限制与不断增长的性能需求之间的矛盾越来越尖锐。第 5 版除了为读者提供计算机

体系结构的介绍,还为读者准备了为应对该矛盾而必须在设计方面做出的修改 。 在这个计算技
术的新领域,必须进行软硬件协同设计,另外,系统级体系结构优化与部件级优化一样重要 。

— Christos Kozyrakis ,

Stanford 大学

Patterson 和 Hennessy 非常英明地指出持续发展的计算机硬件结构中的问题,强调硬件和软

件模块在不同抽象层次上的交互 。 第 5 版通过一系列软硬件间的机制将 1/0 和并行概念贯穿全
书,对后 PC 时代的计算机体系结构进行了全面的展示 。 对千在平板 PC 和云计算中面临能效
问题和并行性挑战的软件和硬件专家而言,本书是一部必备的指导书 。

—

Jae C. Oh, Syracuse 大学

1 译者序
Computer Organization and Design : The Hardware/Software Interface

I

D. Pallerson 和 J. Hennessy 是计算机领域的知名学者,为计算机学科和产业的发展做出了巨
大贡献,他们合著的 《 Computer Organization and Design: The Hardware/ Software Interface 》 一书

现已发行了第 5 版 。 该书对计算机组成的研究和设计实践进行了全面系统的总结 。

目前,国际

上许多大学的计算机原理或计算机体系结构课程都采用这本教材,国内也有不少大学采用这本
教材 。
第 5 版在保持计算机组成方面传统论题以及前 4 版特点的基础上,引入了许多近几年计算

机领域发展的新论题 , 如移动计算、大数据等 。 另外,在实例方面也与时俱进地采用 ARM

Cortex A8 和 Intel Core i7 等现代设计对计算机组成的基本原理进行说明 。
感谢机械工业出版社华 章公司 一 直关注本书的引进和中译本的出版 工作,姚 蕾 编辑和朱秀
英编辑为中译本的翻译工作提出了大量 宝贵意见 。
感谢清华大学郑纬民教授对前 3 版中译本所做的工作,是他使得这本重要教材在国内有了

广泛的读者 。 感谢西北工业大学康继昌教授、樊晓枑教授和安建峰副教授对第 4 版中译本所做
的 工作,是他们使得第 5 版的翻译有了很好的基础 , 另外,康继昌教授和安建峰副教授也参与
了本版的翻译工作 。
西北工业大学计算机学院的研究生赵磊、刘朝锋、庄森 、 马鑫、朱迪、朱艳娜等也参加了
本书的翻译和校对工作 。 本书的翻译工作还得到了国家自然科学基金项目 (No. 61472322) 的

支持 。
由于译者水平有限,书中难免存在 一 些翻译不当或理解欠妥的地方 , 希望读者批评指正 。
王党辉
2015 年 2 月于西北工业大学

前言 1
Computer Organization and Design: The Hardware/Software interface

我们伲休验的景及记的布物儿神秘,它儿所有主正的艺术和科令的嫌泉 。

—阿尔.. 特 · 爱 因 斯惶, ( 我的信仰 〉 , 1930

关千本书
在学习计算机科学与工程时,除了 掌 握计算的基本原理外,还应该了解该领域的最新进

展 。 各种计算领域中的读者应有机会学习计算机系统的组成理论,因为这是决定计算机系统的
功能 、性 能甚至成功与否的关键 。

现代计算机技术需要各种计算方面的专家,他们应对硬件和软件都有深入的理解 。 硬件和

软件在多个层次上的相互关系成为理解计算基本原理的框架 。 无论你的主要兴趣是硬件还是软
件,是计算机科学还是电气工程,计算机组成与设计的基本思想都是相同的 。 因此,本书着重
展示硬件与软件的关系,并重点介绍当今计算机中的基础概念 。

近年来,处理器已经由单核发展为多核,这也印证了本书自第 1 版就预测的发展趋势 。 有些
程序员忽略了这一发展趋势,他们希望计算机体系结构专家、编译器设计者和芯片工程师能够帮
助他们,让程序不做任何修改就可以更快或更高效地在新型处理器上运行 。 但是,这样的时代已
经一去不返了 。 为了使程序运行得更快,必须将其并行化 。 然而,许多研究者的目标是希望程序
员在编写程序时不需要考虑硬件的并行特征,这一目标要很多年才能实现 。 至少在下一个十年
里,大多数程序员必须理解硬件/软件接口,才能编写出能在并行计算机上高效运行的程序 。
本书适合以下读者 : 在汇编语言或逻辑设计方面只有少许经验,需要理解基本计算机组成

的读者;具有汇编语言或逻辑设计的基础,需要学习如何设计计算机,或者要进一步理解计算
机系统如何工作的读者 。

与本书相关的另一本书
有些读者可能已经熟悉作者的另 一本 书《 Computer 比咖lecture: A Quantitative Ap-

proach》 气 该书已广为流传,经常以作者姓名命名,称为" Hennessy and Patterson" (本书则常
称为 "Patterson and Hennessy") 。 我们写该书的目的是要用坚实的主程基础和量化的性价比权

衡来描述计算机体系结构的原理 。 我们以商用系统为例,用测 量 的方法来描述实际的设计经

验。我们的目标是用量化的方法而不是用描述的方法学习计算机体系结构,希望这一方法有助
千培养能精确理解计算机的专业人才 。

本书的大多数读者并不一定要成为计算机体系结构的设计者 。 但是,未来软件设计人员对
与软件系统协同工作的基本硬件技术的理解程度,将直接影响软件系统的性能和能效。因此,
编译器设计者 、 操作系统设计者、数据库程序员以及其他大多数软件工程师对本书的原理必须
有充分的了解 。 同样,硬件设计者也必须清楚地理解他们的工作对软件的相应影响 。
所以,本书的内容远多千" Hennessy and Patterson" , 而且进行了大量修订,以适应不同专
业的读者 。 我们对再版" Hennessy and Patterson" 时删除的大 量 介绍性材料的效果感到满意,
这使得新版与第 1 版内容的重叠大大降低,本书亦如此 。

e

机械工业出版社已出版了本书的第 3 版 、 第 4 版和第 5 版影印书,书名为《计箕机体系结构:盘化研究方
法 》。 __-编辑注

VII
第 5 版的变化
第 5 版有 6 个主要的目标 : 使用运行例子的方法论证理解硬件的重要性;对前面已经提到
的重要技术采用黑体的方式进行强调;对例子进行了更新,以反映从 PC 时代到后 PC 时代的
发展;将 J/0 吞吐率方面的材料贯穿在整本书中,而不是集中在一章中;对技术内容进行了更

新,以反映自 2009 年第 4 版出版以来工业界的变化;将附录和可选章节(目录中带有 鹄 图标
的章节)的内容放在互联网上 (booksite. elsevier. com/9780124077263/index. php) , 而不是放在

CD 上,降低了本书的成本,也使该版本变成了 一部电子书 。
在详细介绍第 5 版的修订目标之前,首先看下表 。 该表给出了本书的主要内容,并为关注

硬件和关注软件的两种读者分别进行了导读 。 其中,第 l 、 4 、 5 和 6 章对两种读者同等重要 。

第 1 章讨论了能耗的重要性和由其引发的处理器从单核向多核的转变,并介绍了计算机设计中
的 8 个伟大思想 。 第 2 章对于硬件读者来说很可能是复习性材料,而对于软件读者来说则是重
要的阅读材料,特别是希望深入学习编译器和面向对象编程语言的读者 。 第 3 章适合对定点运

算或者浮点运算感兴趣的读者,有些读者可能不需要学习第 3 章 。 然而,我们将在本章介绍矩
阵乘法运行的例子,展示如何采用子字并行方法将性能提高 4 倍,因此不要跳过 3 . 6 -3. 8 节 。

第 4 章介绍了流水线处理器 。 其中, 4. I 、 4.5 和 4. 10 节给出了流水线概述, 4. 12 节给出了进

一步提高矩阵乘法运算性能的方法,这些小节对于软件设计者来说比较重要 。 对于硬件设计
者,第 4 章是核心内容 。 另外,根据读者知识背景的不同,可以选择是否首先阅读附录 C 中的

逻辑设计部分 。 最后一章是多核、多处理器和集群系统,这一章是全新的内容,因此所有读者
都应该阅读 。 本版的重要组织结构是使许多思想的引入更加自然,例如 GPU 、仓储式计算机和
集群系统中的关键一网络接口卡的软硬件接口 。

第 1 章计算机概要与技术

第 2 章指令:计算机的语 言

RISC 指 令集 体系结构

第 3 章计算机的算术运算

附录 B

逻辑设计基础

遭,.

1.1-l.ll
12 (历史)
2. J -2. 14
芍 2. 15 (编译器和 Java)
2.16-2. 20
笣 I.

鹄 2.

附录 E

21 (历史)

铜 E.l-E.17

3. I -3. 5
3. 6 -3. 8 (子字并行)
3. 9 - 3. 10 (谬误)
鹄 3. 11 (历史)
B. I - B. 13

4.2 (逻辑设计惯例)
4. 3 -4. 4 (简单实现)
4.5 (流水线概述)
4.6 (流水线数据通路)
4. 7-4. 9 (冒险和异常)
4. 10-4.12
拇 4.

鹄 4.

(并行和实例)

13 (Verilog 流水线控制)

4.14-4.15

义

儿,

耀

,

允

一一.

儿

一双

又

兄,J心

胃

胃

兑

~

,

心T也`

SU{

4. I (引言)

第 4 章处理器

----- 一
-- .,.---- ----- ------ --

关注软件

章/ 附录

(谬误)

16 (历史)

~

一一.

-心

.,.

胃,.`

霓

,
,
儿

~

训I

章附录

1
附录 D

I

控制通路的硬件实现

I

铝 D. 1-D. 6

5. I -5. 10
踞 5 . 11 (廉价冗余磁盘阵列)
第5 章

大容量和高速度:开发存储器层次结构

豁 5.

12 (Verilog cache 控制器)

5. 13 -5. 16

钙 6. 9 (网络)

据 6. 15 (历史)

汇编器、链接器和 SPIM 仿真器

A. I -A. 11

图形处理单元

鹄 C.

仔细阅读重,..

有时间阅读覃六了

胃瞿重

耀

爆霄

I -C. 13

作为参考丈六云

胃

霄霄

6. 10-6.14

附录 C

鬼

渴胄

6. I -6. 8

附录 A

胃冒心

--遭

据 5. 17 (历史)

第 6 章从客户端到云的并行处理器

_H _
----- ---义义

回顾或阅读覃六了

拓展阅读覃门覃

第 5 版的第一个目标是使用一个例子来论证理解硬件对提高性能和能效的重要性 。 正如前
面所述,在第 3 章,我们采用子字并行将矩阵乘法加速 4 倍,在第 4 章通过循环展开将性能翻
倍,证明了指令集并行的价值 。 第 5 章通过分块技术对 cache 进行优化,再次将性能翻倍。第
6 章通过在 16 个处理器上的线程级并行获得了 14 倍的加速比 。 这 4 种优化技术仅仅在原始的
矩阵乘法例子中的 C 代码上增加了 24 行。

第二个目标是通过提早介绍计算机体系结构设计中的 8 个伟大思想并在整本书中明确指出
它们的应用之处来帮助读者理解计算机设计的精髓。我们采用黑体文字的方式向读者提醒这 8
个思想的应用情况,在书中大约有 100 次引用。每一章中至少有 7 处应用这些思想的例子,并
且每个思想至少被引用 5 次 。 通过并行提高性能、流水线和预测技术是引用次数最多的 3 个思

想,紧接着是摩尔定律 。 第 4 章讲述处理器,是例子最多的一章,也是最吸引计算机设计者的
一 章 。 每一章都能找到的伟大思想是通过并行提高性能,这是近年来计算机领域中的一个重要
发展方向 。
第三个目标是通过例子和材料来识别计算技术从 PC 时代进入后 PC 时代的变化。因此,
第 1 章直接介绍了平板电脑而没有介绍 PC, 第 6 章介绍了云计算的基础设施。另外,在指令
集方面,我们介绍了后 PC 时代中个人移动设备里使用的 ARM 指令集,以及在 PC 时代和云计
算中占主导地位的 x86 指令集 。
第四个目标是将 1/0 吞吐率方面的材料贯穿在整本书中,而不是集中在一章中,这与第 4
版中将并行性贯穿全书一样,因此,本版可在 1. 4 、 4.9 、 5.2 、 5.5 、 5 . 11 和 6.9 节中找到 1/0

相关的材料。我们的想法是如果不把这些内容集中在一章,则读者(和教师)能更好地学习
与掌握 1/0 。
计算机是一个快速发展的领域,对千本书新的版本也是如此,编写新版的一个重要目的是
更新技术内容 。 实际的例子就是反映后 PC 时代特点的 ARM

Cortex A8 和 Intel Core i7 , 其他的

亮点包括新的 ARMv8 64 位指令集、讲解 GPU 特有术语的教程、组成云的仓储式计算机的内涵
以及对 lOG 以太网卡的深入理解。

为了保待纸质书的厚度及其与电子书的兼容性,我们一改以前版本的做法,将可选内容由
随书 CD 改为网络在线的形式。
最后,我们更新了本书的所有练习题 。

IX
在对内容进行修订的同时,我们保留了以往版本中有用的元素 。 为使本书更好地作为参考
书,我们还在新术语第 一次 出现时给出了定义 。 书中标题为“理解程序性能”部分的内容有
助于读者理解程序的性能,以及如何提高性能,就像书中 “硬件/ 软件接口”部分会帮助读者
理解有关接口的权衡问题 一样。”重点” 部分仍然存在,以使读者看到整个 “森 林”而不是每

一棵“树" 。 每章最后提供“小测验”部分的答案,帮助读者在第 一 时间加强对内容的理解 。
本版同样提供了 MIPS 参考数据(这是从 IBM System/360 "绿卡”得到的灵感),并对数据进

行了更新,在编写 MIPS 汇编语言程序时,这应该是一 个很好的参考 。

教学支持 e
我们收集了大量 材料供教师授课使用,包括题解 、图表、 幻灯片等,可从出版商处获得 。
如需更多信息,请访问网址: textbooks. elsevier. com/9780124077263 。

结语
从下面的致谢中,你可以发现我们花费了大量精力去修改本书的错误 。 由于本书印刷了多

次 , 因此我们有机会做更多的校正 。 如果你发现有遗留的错误,请通过电子邮件与出版社联
系:

cod5 bugs@ rnkp. com 。
本版标志着 Hennessy 和 Patterson 自 1989 年以来长期合作的第二次中止 。 由于要管理 一 所

世界知名的大学, Hennessy 校长将不能继续承担新版本的实际编写工作 。 留下 Patterson 一人感

觉自己像个总是和伙伴们 一 起演出的演员,突然被推到前台独自表演 。 所以,在致谢名单中列
出的人和 Berkeley 的同行们在本书的撰写过程中甚至起了更大的作用 。

第 5 版致谢
在本书的每一版中,我们都非常幸运地得到了来自许多读者、评审者和其他人员的帮助 。
每个人的帮助都使本书更加完美 。

由于第 6 章做了巨大的修改,因此我们对其思想和内容进行了单独的评审,并基于每位评
审人的反馈意见做了修改 。 感谢 Stanford 大学的 Christos Kozyrakis, 他建议在集群中使用网络接

口来论证 1/0 的软硬件接口,并对该章的组织提出了意见 。 还要感谢 Stanford 大学的 Mario

Flagsilk, 他提供了 NetFPGA NIC 的细节、表格以及性能评估 。 另外,以下人员对本章提出了修
改建议: Northeastern 大学的 David Kaeli 、 HP 实验室的 Part.ha Ranganathan 、 Wisconsin 大学的

David Wood 以及 Berkeley 大学的同事 Siamak Faridani 、 Sho扣b Kamil 、 Yunsup Lee 、 Zhan即 Tan
和 Andrew Waterman 。

我们要对 UC Berkeley 的 Rimas Avizenis 表示特别的感谢,他开发了不同版本的矩阵乘法程

序,并提供了相应的性能数据 。 当我在 UCLA 读研究 生时,我与他的父亲一起工作,能够与他
一起在 UCB 共事是 一 件美好的事情 。
我也要对我的长期合作伙伴一UC Berkeley 的 Randy Katz 表示感谢 。 我们共同讲授研究生

的计算机体系结构课程,他在开发计算机体系结构的伟大思想方面提供了很大的帮助 。
感谢 David 际K 、 John Nickolls 和他们在 NVIDIA 的同事们 (Michael Garland 、 John Mon-

e

爱思唯尔 (ELS): 关于本书教辅资源,使用教材 的老师 需通过爱思唯尔的教材网站 (www.

elsevier. com)

注册并通过审 批后才能获 取相关资源 。具 体方法如下:在 www.

textbooks. elsevier.

textbooks.

com 教材网站

查找到该书后, 点击 " instructor manual" 便可申请查看该教师手册 。 有任何问题,请致电 010- 85208853 。
-—编辑注

x
trym 、 Doug Voorhies 、 Lars Nyland 、 Erik Lindholm 、 Paulius Micikevicius 、

Stuart

Massimiliano Fatica 、

Oberman 、 Vasily Volkov) 提供了第一个深入介绍 GPU 的附录 。 再次感谢 Jim Larus, 他现

在是 EPFL 计算机与通信科学学院的院长,为本书发挥了在汇编语 言 方面的专长,欢迎本书读
者使用他所开发和维护的模拟器 。
非常感谢 South Carolina 大学的 Jason Bakos , 他在第 4 版的基础上对本版的练习题进行了更
新 。 第 4 版的练习题由以下人员编写: Perry Alexander (Kansas 大学)、 Javier Bruguera (de San-

tiago de Compostela 大学) 、 Matthew Farrens (C 吐fornia 大学 Davis 分校) 、 David Kaeli (Northeastem 大学)、 Nicole Kaiyan (Adelaide 大 学)、 John Oliver (Cal Poly, San Luis Obispo ) 、 Milos Pr-

vulovic (Geor伊a 理工大学)和 HP 的 Jichuan Chang 、 Jacob Leverich 、 Kevin Lim 、 Partha Ranganathan 。

感谢 Jason Bakos 开发了新的幻灯片 。

感谢许多教师的贡献,他们回答出版商的调查问卷、评审我们的提议、出席小组会议,并

对本版的计划进行分析和反馈 。 他们是:
2012 焦点小组: Bruce Barton (Suffolk County Community 学 院), Jeff Braun (Montana 理工
大学), Ed Gehringer (North Carolina State) , Michael Goldweber (Xavier 大学), Ed Harcourt

(St. Lawrence 大 学), Mark Hill (Wisconsin 大学 Madison 分校), Patrick Homer (Arizona 大学),
Norm Jouppi (HP 实验室), Dave Kaeli (Northeastern 大学), Christos Kozyrakis (Stanford 大学),
Zachary Kurmas (Grand Valley 州 立大学), Jae C. Oh (Syracuse 大学), Lu Peng (Louisiana 州立
大学) , Milos Prvulovic (Geor伊a 理工), Partha Ranganathan ( HP 实验室), David Wood (Wis-

consin 大学), Craig Zilles (Illinois 大学香殡分校) 。
参考调查和审阅的学者: Mahmoud Ahou- Nasr (Wayne 州立大学), Perry Alexander (Kansas
大学), Hakan Aydin (George Mason 大学) , Hussein Badr (New York 州立大学 Stony Brook 分
校), Mac Baker (Virginia Military 学院), Ron Barnes (George Mason 大学), Douglas Blough
(Georgia 理工), Kevin Bolding (Seattle Pacific 大学), Miodrag Bolic (Ottawa 大学), John Bono-

mo (Westminster 学院), Jeff Braun (Montana 理工大学), Tom Briggs (Shippensburg 大学),
Scott Burgess (Humboldt 州立大学), Fazli Can (Bilkent 大学), Warren R. Carithers (Rochester

理工学院), Bruce Carlton (Mesa Community 学院), Nicholas Carter (Illinois 大学香棕分校),
Anthony Cocchi (New York 城市大学), Don Cooley (Utah 州立大学), Robert D. Cupper (Allegheny 学院), Edward W. Davis (North Carolina 州 立大学), Nath皿el

J. Davis (Air

Force 理工学

院), Molisa Derk (Oklahoma 城市大学), Derek Eager (Saskatchewan 大学), Ernest Ferguson

(Northwest Missouri 州立大学), Rhonda Kay Gaede (Alabama 大学), Etienne M. Gagnon
(UQAM) , Costa Gerousis (Christopher Newport 大学), Paul Gillard (Newfoundland 纪念大学) ,
Michael Goldweber (Xavier 大学), Geor护 a Grant (San Mateo 学院), Merrill Hall (The Master' s
学院), Tyson Hall (Southern Adventist 大学), Ed Harcourt (St. Lawrence 大学), Justin E-

. Harlow (South Florida 大学), Paul F. Hemler (Hampden-Sydney 学院), Martin Herbordt (Boston
大学), Steve J. Hodges (Cabrillo 学院), Kenneth Hopkinson (Cornell 大学), Dalton Hunkins

(St. Bonaventure 大学), Baback lzadi (New York 州立大学 New Paltz 分校), Reza Jafari , Robert
W. Johnson (<:olorado Technical 大学), Bharat Joshi (North Carolina 大学 Charlotte 分校), Nagar­
ajan Kandasamy (Drexel 大学), Rajiv Kapadia, Ryan Kastner (C吐fornia 大学 Santa Barbara 分
校), E. J. Kim (Texas A&M 大学), Jihong Kim (Seoul 国立大学), Jim Kirk (Union 大学),

Geoffrey S. Knauth (Lycoming 学院), Manish M. Kochhal (Wayne 州立大学), Suzan Koknar- Tezel
(S印 nt Joseph 大学), Angkul Kongmunvattana (Columbus 州立大 学 ) , April Kontostathis (Ursinus

XI
学院), Christos Kozyrakis (Stanford 大学), Danny Krizanc (Wesleyan 大学), Ashok Kumar,

S. Kumar (Texas 大学), Zachary Kunnas (Grand Valley 州立大学), Robert N. Lea (Houston 大
学), Baoxin Li (Arizona 州立大学), Li Liao (Delaware 大学), Gary Livingston (Massachusetts

大学), Michael Lyle , Douglas W. Lynn (Oregon 理工学院), Y ash want K Mal幻ya (Colorado 州立
大学), Bill Mark (Texas 大学 Austin 分校), Ananda Monda! (Claflin 大学), Alvin Moser (Seat-

tle 大学), Walid Najjar (California 大学凡versicle 分校), Danial

J. Neebel

(Loras 学院), John

Nestor (Lafayette 学院), Jae C. Oh (Syracuse 大学), Joe Oldham (Centre 学院), Timour Paltashev, James Parkerson (比kansas 大学), Shaunalc Pawagi (SUNY Stony Brook 分校), Steve
Pearce, Ted Pedersen (Minnesota 大学), Lu Peng (Louisiana 州立大学), Gregory D Peterson
(Tennessee 大学), Milos Prvulovic (Georgia 理工), Partha Ranganathan (HP 实验室), Dejan

Raskovic (Alaska 大学 Fairbanks 分校), Brad 凡chards (Puget Sound 大学), Roman Rozanov,
Louis Rubinfield (Villanova 大学), Md Abdus Salam (Southern 大学), Augustine Samba (Kent 州
立大学), Robert Schaefer (Daniel Webster 学院), Carolyn

J. C. Schauble

(Colorado 州立大学),

Keith Schubert (CSU San Bernardino 分校), William L Schultz, Kelly Shaw (Richmond 大学),
Shahram Shirani (McMaster 大学), Scott Sigman (Drury 大学), Bruce Smith, David Smith, Jeff
W. Smith (Georgia 大学, Athens) , Mark Smotherman (Clemson 大学), Philip Snyder (Johns
Hopkins 大学), Alex Sprintson (Texas A&M) , Timothy D. Stanley (Brigham Young 大学), Dean

Stevens (Morningside 学院), Nozar Tabrizi (Kettering 大学), Yuval Tamir (UCLA), Alexander
Tau.bin (Boston 大学), Will Thacker (Winthrop 大学), Mithuna Thotteth呻 (Purdue 大学),
Manghui Tu (Southern Utah 大学), Dean Tullsen (UC San Diego 分校), Rama Viswanathan (Beloit 学院), Ken Vollmar (Missouri 州立大学), Guoping Wang (In中ana- Purdue 大学), Patricia

Wenner (Bucknell 大学), Kent Wilken (California 大学 Davis 分校), David Wolfe (Gustavus Adolphus 学院), David Wood (Wisconsin 大学 Madison 分校), Ki Hwan Yum (Texas 大学 San An-

tonio 分校), Mohamed Zahran (New York 城市学院), Gerald D. Zamett (Ryerson 大学), Nian

Zhang (South Dalcota School of Mines & Technology) , Jiling Zhong (Troy 大学), Huiyang Zhou
(Central Florida 大学), W eiyu Zhu (lliinois Wesleyan 大学) 。
特别感谢 Mark Smotherman 一遍又一遍地查找本书中的技术错误和写作错误,他的工作显

著地改进了这一版的质量 。
还要感谢 Morgan Kaufmann 公司同意在 Todd Green 和 Nate McFadden 的领导下对本书进行再
版,没有他们的工作,我不可能完成本书 。 我们还要感谢 Lisa Jones 和 Russell Purdy , 她们分别

负责管理出版过程和封面设计 。 新封面将本版中后 PC 时代的内容和第 1 版的封面呼应了起来 。
以上提到的近 150 名人士为本版提供了大量帮助,使之成为我们希望的最好的书 。

David A. Patterson

作者简介 1
Computer Organization and Design: The

Hardware/Soflw盯e

Interface

David A. Patterson
自从 1977 年在加州大学伯克利分校任职开始 一 直讲授计算机体系结构课程,他现在是计
算机科学系的执行主席 。 他的教学工作获得了加州大学优秀教学奖、 ACM Karlstrom 奖、 IEEE
的 Mulligan 教育奖章和本科生教学奖 。 因为对 RISC 的贡献, Patterson 获得了 IEEE 技术进步奖
和 ACM Eckert- Mauchly 奖,另外因为对 RAID 的贡献,他与别人分享了 IEEE Johnson 信息存储
奖 。 他和 John Hennessy 分享了 IEEE

John von Neumann 奖章与 C&C 奖励 。 Patterson 是美国艺

术与科学院、计算机历史博物馆、 ACM 和 IEEE 院士,并且入选国家工程院、国家科学院和硅
谷工程名人堂 。 他曾任美国总统信息咨询委员会成员、伯克利 EECS 系 CS 分会主席、计算研
究学会主席和 ACM 主席 。 这个纪录使他获得了 ACM 和 CRA 的杰出服务奖 。
在伯克利, Patterson 领导了 RISC I 的设计与实现,这是第 一 款精简指令系统计算机,并且
是商用 SPARC 体系结构的基础 。 他是廉价磁盘冗余阵列 (RAID) 项目的负责人, RAID 技术

引导许多公司开发出了高可靠存储系统 。 他也参加了工作站网络 (NOW) 项目,该项目先引
导互联网公司使用集群技术,再引导了后来的云计算 。 这些项目获得了三个 ACM 最佳论文奖 。
他当前的研究包括算法-机器-人、面向可证明优化实现的高可靠高效算法与专家系统 。 AMP
实验室正在开发可扩展的机器学习算法、仓储式计算机编程模型以及密集资源工具,以从云中
的大数据获得有价值的信息 。 ASPIRE 实验室使用深度的硬件和软件协同技术在移动和货架计

算系统中获得最高性能和能效 。

John L. Hennessy
斯坦福大学的第十任校长,他从 1977 年开始任职于斯坦福大学电子工程与计算机科学系 。
Hennessy 是 ACM 和 IEEE 会士、国家工程院成员、国家科学院成员、美国艺术与科学院院士 。
他获得了许多奖项,其中包括:因为对 RISC 的贡献获得的 2001 年 ACM
2001 年 Seymour Cray 计算机工程奖,与 Patterson 分享了 2000 年 John

Eckert- Mauchly 奖,
von Neumann 奖 。 他还获得

了七个荣誉博士学位 。

1981 年,他在斯坦福大学与几个研究生开始了 MIPS 项目 。 在 1984 年完成了该项目后,他
离开大学,与他人共同创建了 MIPS 计算机系统(现在的 MIPS 技术公司),该公司开发了第一
款商用 RISC 微处理器 。 2006 年, MIPS 微处理器销售了 20 亿片,应用范围从视频游戏和掌上
计算机到激光打印机和网络交换机 。 后来, Hennessy 领导了 DASH (共享存储器的主导体系结

构)项目,该项目建立了第 一 个可扩展 cache 一致性多处理器的原形系统,其许多关键思想已
经应用在先进的多处理器中 。 除了技术活动与大学工作外,他还是多家创业公司的早期顾问和

投资者 。

1 目录
Computer Organization and Design: The Hardwa re/Software Interface

出版者的话

1. 8

本书赞誉
译者序

1. 9

沧海巨变:从单处理器向多处理器
转变...... ... ................. . .........

29

实例:

31

Intel Core

i7 基准... ……...

前言

1. 9. l

SPEC CPU 基准测试程序…... 31

作者简介

1. 9. 2

SPEC 功耗基准测试程序…… 32

第 1 章计算机概要与技术·…… … ….. 1

I.

1

弓 I 言. .... .... . ... .......... . ...............

1

I. I. 1

计算应用的分类及其特性…… 2

I. 1. 2

欢迎来到后 PC 时代 ·…… …..

3

1. 1. 3

你能从本书学到什么.. . ...... …

4

1. 2

1. 10

谬误与陷阱... ... ...... . ........... ...

33

1. 11

本章小结 . .......... ....... . ...........

35

历史观点和拓展阅读…………...

36
36

鸽 l.

12
l. 13

第 2 章指令:计算机的语言……… 40

2.

计算机系统结构中的 8 个伟大

练习题... .. ....... ...... ... ............

1

弓I 言

. . ....... .. ... ......................

40

思想..................... . ....... .. ........

6

2.2

计算机硬件的操作……………… 43

面向摩尔定律的设计... ………

2. 3

计算机硬件的操作数 ·…….. …… 44

1. 2. 1
1. 2. 2

使用抽象简化设计 . ...... .. ......

6
6

1.2.3

加速大概率事件…… ... ………

6

1. 2. 4

通过并行提高性能……· ….. … 7

2.4

有符号数和无符号数…… ……… 48

1. 2. 5

通过流水线提高性能………… 7

计算机中指令的表示…………… 53

1. 2. 6

通过预测提高性能….. . . .. …...

7

2.5
2.6

1. 2. 7

存储器层次.. ...... ......... . ... . ..

7

1. 2. 8

通过冗余提高可靠性...…….. .

7
7

1. 3

程序概念入门.... .. . .... .. .. ... .. . .. ... .

1. 4

硬件概念入门............ .. ..........

10

1. 4. 1

显示器..... .. .... . . .. . .... . .. . . ..

11

1. 4. 2

触摸屏

. ..... . .. . .. . . .............

12

l. 4. 3

打开机箱............. . .. . . ......

12

l. 4. 4

数据安全

..... ..... ...... . .......

15

1. 4. 5

与其他计算机通信... ………

16

处理器和存储器制造技术… …...

17
20

1. 5
1. 6

性能.. . . . ........ .. .. .. . ... . .. .. .. . .....

1. 6. 1

性能的定义................. ....

20

1. 6. 2

性能的度量.... . .... .... ..... ...

22

1. 6. 3

CPU 性能及其因素…... ……

1. 6. 4

指令的性能........ ... .... ... ...

23
24

1. 6. 5

经典的 CPU 性能公式……...

1. 7

功耗墙........ . ....... . .... .... .. .. ....

25
27

2. 3. 1

存储器操作数..................

2.3.2

常数或立即数操作数……… 47

逻辑操作..................... .. . . . ....

45

58

2. 7 决策指令.............................. 60
2. 7. 1 循环..... . . .. ... .................. 61
2. 7. 2
2.8

case/ switch 语句

............... 63

计算机硬件对过程的支待·……..

2. 8. 1
2. 8.2

64

使用更多的寄存器………… 66
嵌套过程...... . ..... ...... . .....

67

2. 8. 3 在栈中为新数据分配空间… 69
2.8. 4 在堆中为新数据分配空间… 70
2.9 人机交互. ..... ..... . ... . .. .... . . .. ... . 72
2. 10 MIPS 中 32 位立即数和寻址…… 75
2. 10. 1 32 位立即数 .................. 75
2. 10.2

分支和跳转中的寻址 …… . ..

2. 10. 3
2. 10. 4

机器语言解码.... . .. ...... .. .. .

MIPS 寻址模式总结

76

…... … 78
79

2. 11

并行与指令:同步 · ….. ……......

2. 12

翻译并执行程序………………… 83

2. 12. 1
2. 12.2

Bl

编译器 · ············· · " ·"···· · · ·83
汇编器..... ... .. ...... .... . ......

84

XIV
2. 12.3

链接器................ : ..........

85

2. 12.4

加栽器............. ..... . ........

87

2. 12.5

动态链接库 ··· ····· ······· ····· ·87

2. 12.6

启动一个 Java 程序………… 89

2. 13

以一个 C 排序程序作为完整的
例子.............. ... ............... . ...

90

2. 13. 1 swap 过程.... .. ............. . . 90
2. 13. 2 sort 过程................. . ... 91
2. 14 数组与指针.................. . ........ 96
2. 14. 1
2. 14. 2

用数组实现 clear

………… 96

用指针实现 clear

…... …... 97

2. 14.3

比较两个版本的 clear

甜 2. 15

…… 97

高级内容:编译 C 语言和解释
Java 语言................ . .............

3. 4. 1
3.4.2
3.4.3
3. 4. 4

3. 5.2

浮点加法..... . ..................

135

3. 5. 3

浮点乘法........... . ............

138

3. 5. 4
3.5.5
3. 5. 6

MIPS 中的浮点指令...... …

139
145
146

3.6

2. 17. 2

x86 寄存器和数据寻址
模式

............ 102

105

2. 17. 4
2. 17. 5

x86 指令编码............ . .....

107
108

x86 总结......... . ..............

实例: ARMv8 (64 位)
指令集..... . ..... . ........ . .........

108

2. 19

谬误与陷阱.. . .... . ................

109

2.20

本章小结...................... .. ...

110

2.22

历史观点和拓展阅读………… 111
练习题..............................

112

第 3 章计算机的算术运算………… 117

3.

并行性和计算机算术:子字

3. 10
鹄 3. 11

148

实例: x86 中流处理 SIMD 扩展和

149

加速:子字并行和矩阵乘法…. . . 150
谬误与陷阱...... . ......... ... . .. .....

153

本章小结.............. . ............

155

历史观点和拓展阅读………… 158
练习题....... .. .....................

159

第 4 章处理器........ . ..................

162

·············••,o••········103

x86 整数操作..................

鹄 2.21

,J 、结.............. .... .. .... ......

高级向量扩展................ . .. . ....

3. 12

2. 17. 3

2. 18

算术精确性 . ................ ....

并行.................... . ...............

3.8
3.9

x86 的改进

..... .... ...... 129
.. . ..... .......... ..... .... ... 129

MIPS 中的除法

131

比较和条件分支………… JOO

Intel

128

浮点表示 .. .. .. ..................

3. 7

2. 17. 1

更快速的除法..................

3. 5. 1

98

2. 16. 3 ARM 的特色 ··················JOO
2. 17 实例: x86 指令集.................. 102

128

3.4.5 小结
3.5 浮点运算....... ....................... 130

2. 16 实例: ARMv7 (32 位)指令集… 98
2. 16. I 寻址模式........................ 99
2. 16.2

除法算法及其硬件结构…… 125
有符号除法.. . ..................

1

弓 I 言....................................

117

3.2
3.3

加法和减法...........................

117
121

乘法....................................

4. 1

弓 I 言....................................

4.2
4.3

逻辑设计的一般方法…………… 165
建立数据通路... …..................

162
167

4.4 一个简单的实现机制 ...………… 173
4. 4. 1 ALU 控制........................ 173
4. 4. 2
4.4.3
4.5

主控制单元的设计………… 175
为什么不使用单周期实现
方式 . ....................... . .....

181

流水线概述...........................

182

4.5. 1

面向流水线的指令集
设计.................... ... .......

186

4.5.2

流水线冒险.....................

186

4.5.3

对流水线概述的小结…... …

191

流水线数据通路及其控制….. …·192

3.3. 1
3.3.2

顺序的乘法算法和硬件…… 121
有符号乘法 . ....................

124

4. 6. 1

图形化表示的流水线…… . .. 200

3.3. 3

更快速的乘法......... . ....... .

124

4.6.2

流水线控制.....................

3. 3. 4

MIPS 中的乘法... …………

124

4. 7

数据冒险:旁路与阻塞…·……. . 206

3. 3. 5 ,J 、结 ··· · •·"·"·"'"'"'"''""'125
3.4 除法.................................... 125

4.8

控制冒险..............................

214

假定分支不发生……... …...

215

4.6

4. 8. l

203

~
缩短分支的延迟… ………… 215

4. 8.2
4. 8.3
4. 8.4

5. 4

cache 性能的评估和改进……… 270
通过更灵活地放置块未减少

216
220

5. 4. 1

4. 9 异常 ·· ·· ············ ··· ······· · ·· · · · ·· ·· 221
4. 9. 1 MIPS 体系结构中的异常
处理. . . .......... .... . ........ .... 221

5. 4.2
5. 4.3

在 cache 中查找一个块…. ..

5. 4.4

使用多级 cache 结构减少

动态分支预测..................
流水线小结.... ...... ... ...... ..

4.9. 2 在流水线实现中的异常…... 222
4. 10 指令级并行........................ 226
4. 10. 1 推测的概念.... .. ... . ........ 227
4. 10. 2

静态多发射处理器……. ..

227

动态多发射处理器·……..

231

4. 10. 3
4. 10. 4 能耗效率与高级流水线… 233
4. 11 实例: ARM Cortex-AS 和
Intel Core i7 流水线............... 234
4. 11. I
4. I 1. 2
4. 11. 3
4. 12

ARM Cortex-AS········· ···235
Intel Core i7 920· · · · · · · · · · · ·236
Intel Core i7 920 的性能... 238

高级主题 :通过硬件设计语言
…… 242

设计以及更多流水线示例
谬误与陷 阱

························242

本章小结 ······ ············· ······ ··243
历史观点和拓展阅读

....... . . …

练习题..............................

243
243

第 5 章大容量和高速度:开发
存储器层次结构…………… 252

5. I 弓 I 言 ······ · ·····························252
5. 2 存储器技术. .. . ......... .. ............ 255
5. 2. I SRAM 技术........ .. ........... 256
5. 2. 2 DRAM 技术.... . ................ 256
5. 2. 3 闪存............ .. ................ 258
5. 2.4 磁盘存储器 ······· ·· ············258
5. 3 cache 的基本原理.. . …...... …... 259
5. 3. 1 cache 访问.. ................... 261
5. 3. 2
5.3.3
5.3.4

cache 缺失处理

5. 3. 5

266

……… 267

,J 、结........ . . . ...................

缺失代价........................

277

通过分块进行软件优化…...

280
283

,J 、 结..... ..... .. ..................

5.5.2

纠正一位错、检测两位错的
汉明编码 (SEC/OED)

5.6

… 284

虚拟机.. ....... ........... ........ .....

5. 6. I

虚拟机监视器的必备

条件... ..... .... ..................

5. 6.2

287
289

指令集系统结构(缺乏)

5.6. 3 保护和指令集系统结构…… 289
5. 7 虚拟存储器... ........................ 290
5. 7. I 页的存放和查找...... …...... 293
5. 7.2 缺页故障........................ 294
5. 7. 3 关于写........................... 297
TLB …·…. . 297

5. 7.4

加快地址转换:

5. 7.5

集成虚拟存储器 、 TLB
和 cache

5. 7. 6
5. 7. 7
5. 7. 8
5.8

........................ 300

虚拟存储器中的保护……… 302
处理 TLB 缺失和缺页……… 303
,J 、结............. .... .............

307

存储器层次结构的 一 般框架…… 309

5. 8. 1

问题 1 : 一个块可以被放在
何处..............................

309

5.8.2

问题 2: 如何找到一个块… 310

5. 8.3

问题 3:

当 cache 缺失时

替换哪一块.....................

311

5. 8. 4

问题 4: 写操作如何处理…...

311

5. 8. 5

3C:

一种理解存储器层次

结构行为的直观模型……...

5. 9

312

使用有限状态机来控制简单的

cache···.............. ................ 314

一个 cache 的例子:内置
FastMATH 处理器...

275
替换块的选择...... …... …... 276

5.5 可信存储器层次...... ……......... 283
5. 5. 1 失效的定义........... . ......... 283

·· ············ ·265

写操作处理.....................

272

对虚拟机的支持…………… 289

描述和建模流水线来介绍数字

4. 14
4. 15
驾 4. 16
4. 17

5.4.5
5. 4. 6

运行更快:指 令级并行和矩阵
乘法 ················· · ···············240

鹄 4 . 13

cache 缺失.. ...... .............

269

5. 9. I
5.9. 2

一个 简单的 cache

............ 314
有限状态机..................... 315

XVI
一个简单的 cache 控制器的

5.9.3

6.5

有限状态机 ·····················316

5. 10

并行与存储器层次结构 : cache
一致性

5. 10. 1
5. 10. 2
芸 5. 11

···········.···················317

监听协议........... ..... .. ...

······ · · ··· ·· ········ 320

实例 :

320

ARM Cortex-AS 和 Intel

运行更快: cache 分块和矩阵

324

5. 15

谬误和陷阱... .... .............. ...

326

5. 16

本章小结

17
5. 18

355

NVIDIA

练习题................. ...... .. .. . ..

329

GPU 展望 ······· ·· ···· · ··········358

哿 6. 9

6. 10

集群、仓储级计算机和其他消息
传递多处理器........................

360

多处理器网络拓扑简介…… · …..

363

与外界通信:集群网络………… 366

多处理器测试集程序和性能
模型

·· ·· · ··· · ········ · · ··· · ··· · ······366

处理器

性能模型.. ... . .... ...... .....

6. 10. 2

Roofline 模型 ··········· ···· · · ·369

6. 10. 3

两代 Opteron 的比较… …...

6. 11

实例:评测 Intel

模型

······"·"·"·"·"·"·"·340

GPU 的 Roofline

· ··· · ······ ···· ·· ····· ··· ·· · ·· · · ·373

6. 12

运行更快:多处理器和

矩阵乘法 ··········· · · ·· ·· ·· · ···· · ·· 376

340

6. 13

谬误与陷阱..... ..... .. . .... .. .....

6.2

创建并行处理程序的难点…... …

342

6. 14

本章小结

6. 3

SISD 、 MIMD 、 SIMD 、 SPMD

1

和向量机 ... ..... . .....................

器 6.

345

370

Core i7 960 和

弓 I 言.... ............. ............ .. .. ...

6.

368

6. 10. 1

NVIDIA Tesla
第 6 章从客户端到云的井行

357

6. 6. 3

6. 8

. . …… …·329

GPU 存储结构…...

NVIDIA

6. 7

··· ·· ········ ····· ··· · ·····329

历史观点和拓展阅读

GPU 体系结构

6. 6. 2

高级内容 :实现 cache

乘法.... .. . ... .. ........ ..... ... .... .

等 5.

图形处理单元简介……….. .. …..

简介 ···· ···· ······ · ···············356

319

Core i7 的存储器层次结构…… 320
5. 14

352

6. 6. 1

并行与存储器层次结构:冗余

控制器. ... .. ........ .. ......... .. ...

5. 13

多处理器........... . ............ . .....

实现一致性的基本方案… 318

廉价磁盘阵列
器 5. 12

6.6

多核和其他共享内存

15
6. 16

378

····· ·· ····· · ··············379

历史观点和拓展阅读………… 381
练习题.. . .. ..... ................ . . . .

382

6. 3. 1 在 x86 中的 SIMD: 多媒体
扩展.... ... .. .. .. .. ...............

346

6. 3.2

向量机...........................

346

6.3.3

向量与标量的对比. .. ……...

347

6.3.4
6.4

向量与多媒体扩展的

附录 A

SPIM 仿真器 ·····················389
附录 B

对比... ..... ......... . . ...........

348

硬件多线程 ...... .. .. .. ... ...... ... ...

350

汇编器、链接器和

逻辑设计基础……………… 437

索弓 I··········· ; ·································494

1 第1 章
Computer Organization and Design: The Hardware/ Software Interface

计算机概要与技术
在禾兵灶具休过礼的计况下完成史,的重妻择怍,这种方杖伐遠了文明的迸步 。

——月[frea¾ortfr 叨血胚证, 《如 Introtfuction to'M.at加血吩, 1911

引言

1. 1

欢迎阅读本书!非常高兴有机会与大家一起分享令人兴奋的计算机系统世界 。 这是一个进
步飞快 、 新思想层出不穷 、 非常有趣的领域 。 事实上,计算机是极度充满生气的信息技术工业
的产物,其相关产品几乎占全美国民生产总值的 10% 。 在摩尔定律的推动下,美国的经济已
经与信息技术密不可分 。 这个不寻常的工业具有惊人的发展速度 。 在过去 30 年里,出现了许
多导致计算产业革命的新型计算机 , 但是它们很快就被更好的计算机所取代 。
果运输业能够以计算机工业的速度发展,那么我们只需要花一美分就可以在一秒钟之内从纽约

丿

电子计算机自 20 世纪 40 年代后期诞生以来,其创新性的竞争带来了史无前例的进步 。 如

赶到伦敦 。 想象 一 下,这样的进步将如何改变社会一—生活在南太平洋的塔希提岛,而工作在
旧金山,傍晚去莫斯科吃夜宵——你能够想象得出这种进步意味着什么 。
沿着农业革命 、 工业革命的发展方向,计算机促进了人类的第三次革命一信息革命 。 信
息革命使人类的能力成倍增长,自然而深刻地 影 响着人类的日常生活,甚至改变了寻求新知识
的方法 。 现在有一种科学探索的新方式,即计算科学家联合理论和实验科学家,共同探索天文
学 、 生物学 、 化学和物理学的前沿问题 。

计算机革命一直在向前推进 。 每当计算成本降低 10 倍,计算机的发展机遇就会增加 10

倍 。 原本出于经济考虑不可行的应用突然变得可行了 。 例如,下述各项应用在过去曾经是“计
算机科学幻想,,

:

• 车栽计算机:在 20 世纪 80 年代初微处理器的性能和价格得到极大改进之前,用计算
机来控制汽车几乎是天方夜谭 。 而今天,用计算机控制的汽车发动机普遍应用,车载
计算机不仅改进了燃油效率 、 减轻了污染,还通过盲点警告 、 车道偏离警告、移动目
标检测和安全气囊实现了碰撞时对乘客的保护 。

• 手机:谁曾想到计算机系统的发展会使全球一半以上的人口拥有手机,并让人们几乎
在全球的各个角落都可以自由通信?

• 人类基因项目:以前用千匹配和分析人类基因序列的计算机设备价格达几亿美元 。 在
过去的 15 -25 年里,用于该项目的计算机设备的价格降低了 10 -100 倍 。 随着计算机

设备价格的待续下降,人们可以获得自己的基因序列,并利用其来治疗疾病。
•

万维网:在编写本书第 1 版时,万维网尚不存在,而现在万维网已经改变了整个社会。
在许多地方,它已取代了传统的图书馆和报纸 。

• 搜索引擎:随着万维网规模的扩大和价值的与日俱增,如何快速精确地找到所需信息
变得越来越重要 。 今天,如果没有搜索引擎,许多人在万维网中将寸步难行。
显而易见,计算机技术的进步几乎影响着社会的每 一 个方面 。 硬件的进步使得程序员可以

编写出各种优秀的应用软件,进而证实计算机几乎是无所不能的 。 今天的科学幻想在未来就会
成为现实,诸如虚拟现实、无现金社会和无人驾驶汽车等 。

工

2

笫 l 章

1. 1. 1

计算应用的分类及其特性

从智能家电到手机再到最大型超级计算机,它们虽然使用了 一套 通用的硬件技术(参见

I. 4 和 1.5 节),但这些不同的应用有 着 不同的设计需求,并以不同的方式通过硬件实现 。 概
括地说,计算机主要包括以下 三 类应用:
个人计算机 (Personal Computer, PC) 也许是最为人所知的应用方式,本书的读者几乎都

在大量 使用 。 个人计算机强调对单用户提供良好的性能,价格低廉,通常运行第 三 方软件 。 尽
管此类应用的出现只有短短的 35 年,但它推动了许多计算技术的革新 。

3

个人计算机:用于个人使用的计算机,通常包含图形显示器、键盘和鼠标等 。
服务器 (server) 是过去被称为大型机的现代形式,通常借助网络访问 。 服务器适用千执

行大负载任务,可以执行单个复杂应用(科学的或工程的),也可以处理大 量 的简单作业,如
大型 Web 服务器 。 这些应用通常基千其他来源的软件(例如数据库或仿真软件),并且往往为
了特别的需要而加以修改或定制 。 服务器的制造技术和桌面计算机差不多,但能够提供更强的
计算 、 存储和 I/0 能力 。 通常情况下,当发生故障时,服务器比个人计算机恢复的代价高得
多,因此服务器更加强调可靠性 。

3

服务器:用于为多用户运行大型程序的计算机,通常由多个用户并行使用,并且一般通过
网络访问 。

服务器的功能和价格有很大的伸缩范围 。 低端服务器可能比桌面计算机稍微贵些,不带显示
器和键盘的大约需要 1 000 美元,一般用千文档存储 、 小型商务应用或者简单的 Web 服务(见
6.10 节) 。 高端服务器称为超级计算机 (supercomputer) , 一般由成百上千台处理器组成,内存为

terabyte 级,其价格可高达数千万甚至上亿美元 。 它们主要用千高端科学和工程计算,如天气预
报、石油勘探 、 蛋白质结构计算和其他大规模间题 。 虽然这类超级计算机代表了最高的计算能

力,但是它们只占服务器相对很小的 一部分,在整个计算机市场份额中所占比例也很小 。
3

超级计算机:具有最高性能和最高成本的一类计算机,一般配置为服务器,需要花费数于
万甚至数亿美元 。

:>

terabyte : 一般简写作 TB, 原始定义为 1099511627776 (240)

宇节,但有些通信和辅助存

储系统将其重新定义为 1 000 000 000 000 (1012) 字节 。 为了避免混淆,使用术语 tebibyte
(TiB) 表示 240 字节,而 terahyte 指 101 2 字节 。 图 1-1 表示了十进制和二进制术语的范围 。

I 十进制术语 1 缩写
kilobyte
megabyte
gigabyte
terabyte
petabyte
exabyte
zettabyte
yottabyte

图 1-1

1 数值

KB

103

MB
GB
TB
PB
EB
ZB
YB

10'

IO'
1012
1015
JQIB

10"
J024

1 二进制术语 1 缩写
kibibyte
mebibyte
gibibyte
tebibyte
pebibyte
exbibyte
zebibyte
yob1byte

1 数值

碑

210

MiB
GiB
TiB
PiB
EiB
ZiB
YiB

220
2' '
240
2'"
260
2,o
2•0

1 数值差别 I
2%
5%
7%
10%
13%
15%
18%
21%

通过为常用容量加 一个 二进制注释解决 2' 与 10' 字节的模糊性 。 最后 一 列表示了 二进制术语大千
相应的十进制术语的具体数值 。 在以 bit 为单位时,这些表示方法同样适用,因此护gabit (Cb)
是 109b八,而 gig心t (G山)是 230 bit

计算机概要与技术

3

嵌 入 式计算机 (embedded computer) 是数量最多的一类计算机,应用和性能范围十分广

泛,包括汽车、电视中的微处理器以及用来控制飞机和货船的处理器网络 。 嵌入式计算系统的

设计目标是运行单一应用程序或者一组相关的应用程序,并且通常和硬件集成在一起以单一系
统的方式一并交付用户 。 因此,尽管嵌入式计算机的数量庞大 , 还是有很多用户从来没有意识

到他们正在使用计算机 。
二

嵌入式计算机:嵌入到其他设备中的计算机,一般运行预定义的一个或者一组应用程序 。

仁L

面向单一应用 需求 的嵌入式应用通 常对成本或功耗有 严格限制 。 以音乐播放器为例,处理
器只需尽 量 快速地执行有限的功能,除此之外,降低成本和功耗 是最 大的目标 。 除了低成本的

要求之外 ,由于故障可 能会让使用者感到不适(例如 ,新 电视机 无法 正常收看节目),也可能
会导致安全事故(例如,飞机或货船失事),因此嵌入式计算机对故障非常敏感 。 在面向消费
者的嵌入式应用中(如数字家电)一般通过简单设计来获得可靠性-—-其重点在于尽可能地
保证一项功能的正常运转·。 而在大型嵌入式系统中,采用了在服务器领域应用的多种冗余技

术 。 尽管本书将重点放在通用计算 机上,但是大多数概念可直接或者稍微修改之后用于嵌入式
计算机 。

庄精解

本书中的精解是正文 中 的 一 些段落, 主要 用来对读者可能感兴趣的内容做深入介

绍 。 由于它并不 影响后续内容的学习,因此对 此部 分 不感兴趣的读者可以直接跳过 。
许多嵌入式处理器使用处理器核 。 处理器核是利用硬件描述语言 (如 Verilog 或

VHDL, 见第 4 章)描述的处理器版本,它使得设计者能够把其他 专用硬件与之集成起来
制造在 一块 芯片上 。

1. 1. 2

欢迎来到后 PC 时代

技术的持续进步给计算机硬件带来了革命性的变化,对整个信息技术工业产生了震动 。 就
像 30 年前开始出现的个人计算机对产业带来的变化一样,我们已经从本书的上一版开始感受
到这种变化 。 代替 PC 的是个 人移动 设 备 (Personal Mobile Device , PMD) 。 PMD 由电池供电,
通过无线方式连接到网络,价格通常只有几百美元 。 另外,与 PC 一样, PMD 可下载软件
(App) 并进行运行 。 与 PC 不同的是, PMD 不再有键盘和鼠标,而采用触摸屏甚至语音作为输

入 。 当今的 PMD 可以是智能手机或平板电脑,而明天的 PMD 可能会包括电子眼镜 。 图 1-2 给
出了平板电脑和智能手机与 PC 和传统手机的增长速度的对比 。

3

个人移动设备:连接到网络 上 的小型无线设备 。 PM D 由 电池供电,通过下栽 App 的 方 式
安装软件 。 智能手机和平板电脑是典型的 PMD 。

云计算 (cloud computing) 替代了传统的服务器,它依赖于称为仓储规模计算机 (Ware­

house Scale Computer, WSC) 的巨型数据中心 。 像 Amazon 和 Google 这样的公司构建了包含
100000 台服务器的 wsc, 一些公司可以租用其中一部分为 PMD 提供软件服务,而不用自己构
建 WSC 。 事实上,与 PMD 和 WSC 是硬件工业的革命类似,通过云计算实现的软 件即服务
(Software as a Service, SaaS) 是软件工业的革命 。 当今的软件开发者通常在 PMD 和云上各运行
其应用的 一 部分 。
3

云计算:在网络上提供服务的大服务器集群,一些运营商根据应用需求出租不同数量的服
务器 。

口[

4

3

笫 1 章

软件即服务:在网络上以服务的方式提供软件和数据 。 其运行方式通常不是在本地设备上
运行所有的 二 进制代码,而是通过诸如运行在本地客户端的浏览器等小程序登录到远程服
务器上执行 。 典型的例子是 Web 搜索和社交网络 。
1400
I 200
I 000

R
)In

800
600

/ 智能手机

I

=1 三
0

图 1-2

\手机 ( 不包括智能手机)

I-----/

2007

er-

•

之

.
2008 2009

-

PC (不 包括平板电脑 )
平板电脑

.
20 IO

20 I I

2012

每年生产的平板电脑和智能手机与 PC 和传统手机的数量对比 。 平板电脑和智能手机代表着后 PC 时

代 。 智能手机反映了手机工业的近期增长情况,并且在 2011 年超过了 PC 的产量 。 平板电脑产最增长
最快, 2012 年的产量几乎是 2011 年的两倍 。 PC 和传统手机的产量保持不变甚至在下降

1. 1. 3

你能从本书学到什么

成功的程序员总是关心其程序的性能,因为让用户快速得到结果对软件成功与否至关 重
要 。 在 20 世纪六七十年代,限制计算机性能的主要因素是内存容量 。 因而那时候程序员的信

仁口

条是尽量少占用内存空间,以加速程序的运行速度 。 近十多年来 , 计算机和内存的设计技术有
了长足进步 。 除了嵌入式系统以外,大多数用户对少占内存容 量 的需求大大减轻了 。
现在,关心性能的程序员需要十分明确 , 20 世纪 60 年代的简单存储模型已经不复存在,
现代计算机的特征是处理器的并行性和内存的层次性 。 另外,当今的程序员需要考虑运行在
PMD 或云上的程序 的 能效,这就要求他们了解自己的代码之下的很多细节(见 I. 7 节) 。 因

此 ,程序员为了 创 建有竞争力的软件版本 , 必须增 加 对计算机组成的认知 。
我们很荣幸有机会为你解释这些知识,阐述机箱覆盖之下的计算机内部软硬件是如何工作

的 。 当你读完本书之后,我们相信,你将能够理解下面的问题 :

• 用 C 或 Java 等高级语言编写的程序如何翻译成硬件之间的语言?硬件如何执行程序?
领会这些概念是理解软硬件两者如何影响程序性能的基础 。

• 什么是软硬件之间的接口,以及软件如何指导硬件完成其功能?这些概念对于许多软
件的编写是十分重要的 。

• 哪些因素决定了程序的性能?程序员如何才能改进其程序性能?从本书中我们将知道,
程序性能取决千原始程序、将该程序转换为计算机语言的软件以及执行该程序的硬件
的有效性 。

• 什么技术可供硬件设计者用千改进性能?本书将介绍现代计算机设计的基本概念 。 有
兴趣的读者可深入阅读我们的另一本进阶教材 《 Computer Architecture: A Quantitative
Approach》 。

• 硬件设计者可使用哪些技术提高能效?什么技术可供程序员提高或降低能效?
• 为什么串行处理近来发展为并行处理?这种发展带来的结果是什么?本书给出了解释,

5

计算机概要与技术

并介绍了当今支持并行处理的硬件机制,全面评述 了新一代的多核微处理器 (mul­
ticore microprocessor) (见第 6 章) 。

•

自 1951 年的第一台商用计算机开始,计算机架构师们提出的哪些伟大的思想构成了现
口仁

代计算机的基础?
3

多核微处理器 :在一块集成电路上包含多个处理器("核")的微处理器 。

如果无法理解这些问题,那么要在现代计算机上提升程序性能,或者要评估不同计算机解
决特定问题的优劣将会是一个反复实验的复杂过程,而不是一个深入分析的科学过程 。
本书第 1 章的目的是为其余各章奠定良好的基础 。 它介绍了各种基本概念和定义,指出如
何正确地剖析软硬件,以及如何评价性能与功耗 。 它还介绍了集成电路(为计算机革命提供动
力的技术),并在最后解释了向多核转移的原因 。

在本章和后面几章里,读者会看到许多新的术语或者一些你听过却不知道其含义的术

语 。 但是不用担心,在描述现代计算机时,确实会有很多专用术语,它们使我们能够精确
描述计算机的功能或性能 。 另外,计算机设计人员(包括本书作者)喜欢用首字母缩略词
(acronym) , 一旦知道了每个字母代表什么,就很容易理解了 。 为了帮助读者理解和记忆这

些专用术语,在术语第 一 次出现时,我们会给出明确的定义 。 通过与这些术语的短时间接
触,你将会熟练地正确使用这些术语的缩写,例如 BIOS 、 CPU 、 DIMM 、 DRAM 、 PCle 、
SATA 和许多其他术语 。

3

首字母缩略词:由一串单词中每个单词的首字母相连构成的单词 。 例如 RAM 是随机访问
存储器 (Random Access Memory)

的缩略词, CPU 是中央处理单元 (Central Process Unit)

的缩略词 。

为了加强对软件和硬件对千程序运行性能影响的理解,我们在全书中特别插入了“理解程
序性能”,来对程序性能的理解加以概括 。 下面就是第一个 。

配理解程序性能

一个程序的性能取决于以下各因素的组合:程序所用算法的有效性,用来

建立程序并将其翻译成机器指令的软件系统,计算机执行机器指令(可能包括 V O 操作)
的有效性 。 下表总结了硬件和软件是如何影响性能的 。
软件或硬件组成元素

该元素如何影响性能

该论题出现的位 咒

箕法

决定了源码级语句的数批和 1/0 操作的数屈

其他书

编程语 言 、编译器和体系结构

决定了每条源码级语句对应的计算机指令数拭

第2、 3 章

处理器和存储系统

决定了指 令 的执行速度

第4、 5、 6 章

1/0 系统(硬件和操作系统)

决定了 1/0 操作可能的执行速度

第4、 5、 6 章

为了说明本书中的思想的作用,在一连串章节中对完成一个矩阵与一个向量相乘的 C 程序
进行了性能优化 。 每一步都可以帮助我们理解现代微处理器硬件如何能使性能提高 200 倍!

• 在第 3 章的数据级并行部分,使用 C 语言固有的子宇并行使性能提高 3.8 倍 。
• 在第 4 章的指令级并行部分,使用循环展开开发多指令发射和乱序执行硬件使性能再
提高 2 .3 倍 。

• 在第 5 章的存储器层次优化部分,使用阻塞 cache 将大型矩阵处理性能再次提高
2.5 倍 。

仁汇

6

笫 l 章

• 在第 6 章的线程级并行部分,在 OpenMP 中使用循环并行来开发多核硬件使性能再次
提高 1 4 倍 。

砃 小测验
“小测验”的目的是帮助读者评估自己是否掌握了所学的概念,以及是否理解了这些概念

的内涵 。 在这些小测验中,有些只有简单的答案,有些则 是为了组 内讨论 。 有些问题的答案可
在章末找到 。 所有小测验只在节末出现,如果你确信自己对该部分内容完全理解,则可以跳
过去 。

1. 每年嵌入式处理器的售出数量远远超过 PC 处理器甚至后 PC 处理器的数量 。 根据自己
的经验,你是支持还是反对这种看法?列举你家中使用的嵌入式处理器,它与你家中
桌面处理器的数量相比如何?

2. 如前所述,软件和硬件都会影响程序的性能 。 请思考下述哪个例子属于性能瓶颈 。

• 所选算法
• 编程语 言或编译程序
• 操作系统
• 处理器

•

口

1/0 系统和设备

计算机系统结构中的 8 个伟大思想

1. 2

现在介绍计算机设计者在过去 60 年的计算机设计中提出的 8 个伟大思想 。 这些思想非常

有用,以至于在首台应用它们的计算机之后的很长时间里,设计师在设计新的处理器时都会使
用这些思想 。 这些思想将会贯穿本章和后续章节 。 为了说明它们的影响,本节对这些思想的含
义以及亮点进行介绍,在本书的后续章节中将会明确使用它们近 100 次 。

1. 2. 1

面向摩尔定律的设计

计算机设计者面临的 一 个永恒的问题就是摩尔 定律 (Moore'Law) 驱动的快速变化 。 摩尔
定律指出单芯片上的集成度每 1 8 -24 个月翻 一 番 。 摩尔定律是 Intel 公司的创始人之- Gordon

Moore 在 1 965 年对集成电路集成度做出的预测 。 由千计算机设计需要几年时间,因 此 在项目结
束时,单芯片的集成度相对千设计开始时很容易翻一番甚至翻两番 。 像一个双向飞碟运动员一

样,计算机设计者必须预测其设计完成时的工艺水平,而不是设计开始时的 。

1. 2. 2

使用抽象简化设计

计算机架构师和程序员必须发明能够提高产 量 的技术,否则设计时间也将会向资源规模 一
样按照摩尔定律增长 。 提高硬件和软件生产率的主要技术之 一是 使用 抽象 (abstraction) 来表
示不同的设计层次,在高层次中看不到低层次的细节,只能看到 一 个简化的模型 。

1. 2. 3

加速大概率事件

加速大 概 率事件 (common case f~st) 远比优化小概率事件更能提高性能 。 大概率事件通常

比小概率事件简单,从而易于提高 。 大概率事件规则意味 着 设计者需要知道什么事件是经常发
生的,这只有通过仔细的实验与评估才能得出(见 l. 6 节) 。 可以把加速大概率事想象成 一 辆

口口

赛车,由于通常情况下只有一两名乘客,因此提高赛车的速度要比提高小型货车的速度容易 。

7

计算机概要与技术

1. 2. 4

通过并行提高性能

从计算的诞生开始,计算机设计者就通过并行执行操作来提高性能 。 在本书中将会看到许
多 井行性能 ( parallel performance)

1. 2. 5

的例子 。

通过流水线提高性能

在计算机系统结构中,一个特别的并行性场景就是 流水线 (pipeli ni ng) 。 例如许多 西 部 片

中,一些坏人在制造火灾,在消防车出现之前会有一个“消防队列”来灭火 一小镇的居 民

们排成 一 排 通过水桶接力快速将水桶从水源传至火场, 而 不是每个人都在来 回 奔 跑 。 可 以把流
水线想象成 一 系列水管,其中每一块代表 一 个流水级 。

1. 2. 6

通过预测提高性能

遵循谚语“求人准许不如求人原谅",最后一个伟大的思想就是 预测 ( predic tion ) 。 在某

些情况下,如果假定从误预测恢 复 执行代价不高并且预测的准确率相对较高, 则 通 过 猜 测的方
式提前开始某些操作,要比等到确切知道这些操作应该启动时才开始要快一些 。

1. 2. 7

存储器层次

由千存储器的速度通常影响性能 、 存储器的容 量 限制了解题的规模 、 当今 计算系统中存 储

器的代 价 占了主要部分,因 此程序员希望存储器速度更快、容量 更大 、 价格 更 便 宜 。 设计师们
发现可以通过 存储器层次 ( h ierarc hy of memory) 来解决这些相互矛盾的需求 。 在存储器层次

中 ,速度最快 、 容 量 最 小 并且每位价格最昂贵的存储器 处 于顶层, 而 速度最慢、容量最 大 且 每
位价格最便宜的存储器处于最底 层 。 在第 5 章将会看 到,程序员看到的主存同时具有存储器层

次中顶层的高速度和底层中的大容 蜇 和便宜的特征 。 可以把存储器层次想象成一个堆叠的三角
形,该形状表示速度 、 价格和容 量 : 越靠 近顶 端,存储器速度越快、每位 价 格越高 ; 底层 宽度
越大,存储器容 量 越大 。

1. 2. 8

通过冗余提高可靠性

计算 机不仅需 要速度快,还 需 要工 作 可靠 。 由于任何一个物理器件都有 可能 失效 , 因 此可
以通过使用冗余部件的方式提高系统的 可靠性 ( dependable) , 冗余部件 可 以 替代失效部件并 可
以帮助检测错误 。 可以通过牵引式挂车来理解可靠性 : 牵引式挂车后轴两边具有双轮胎,在一

个轮 胎出问题时 卡车仍 然可以继续工作 。 (在 一 个轮 胎 出问题时 , 卡车司 机 立 即 直接开往 修 理

厂进行修理,从而恢复冗余性 。 )

1. 3

口2

程序概念入门

在巴黎 , 我对名地人讲杖倍 , 他们只儿蹬着我看;我从未没斜让这些白永疗斛位
们自己的语言 。

—马克 · 吐认 , ( 异出奇遏 〉 , 1869

一个 典型的应用程序, 如 字处 理程序或大型数据库系统,可 以 由数百 万 行 代 码 构成, 并 依
靠软件库来实现异常复杂的功能 。 众所周知,计算机中的硬件只能执行极为简单的低级指令 。
从 复杂的应用程序到简单的指令需 要经过 几个软件层次来将复杂的高层次操作逐步解释或 翻 译

8

笫 1 章

成简单的计算机指令,这可以作为伟大思想抽象的 一 个例子 。
图 1-3 给出了这些软件的层次结构,外层是应用
软件,中心是硬件,系统软件 (systems software) 位千

两者之间 。

3

系统软件:提供常用服务的软件,包括操作系统、
编译程序 、 加栽程序和汇编程序等 。

系统软件有很多种,其中有两种对于现代计算机

系统来说是必需的:操作系统和编译程序 。 操作系统

(operating system) 是用户程序和硬件之间的接口,为
用户提供各种服务和监控功能 。 操作系统最为重要的
作用是:

• 处理基本的输入和输出操作 。
• 分配外存和内存 。
• 为多个应用程序提供共享计算机资源的服务 。
当前我们使用的操作系统主要有 Linux 、 iOS 和
Windows 。

口亡

3

图 1-3

简化的硬件和软件层次图,将

硬件作为同心圆的中心,应用
程序软件作为最外层 。 在复杂
的应用中,通常存在多层应用

软件层 。 例如, 一 个数据库系
统可运行于系统软件之上,而
驻留在该系统软件上的某应用
又反过来运行在该数据库之上

操作系统:为了使程序更好地在计算机上运行而管理计算机资源的监控程序 。
编译程序 (compiler) 完成另外一项重要功能:把用高级语言(如 C 、 C

+

+ 、 Java 或 Vis­

ual Basic 等)编写的程序翻译成硬件能执行的指令 。 这个翻译过程是相当复杂的,这里仅作简
要介绍,第 2 章和附录 A 将作深入介绍 。

3

编译程序:将高级语言翻译为计算机所能识别的机器语言的程序 。

从高级语言到硬件语言
谈到电子硬件,首先需要谈到电信号的发送 。 对千计算机来说,最简单的信号是“通”
和“断" 。 因此,计算机只用 2 个字母来表示 。 正如英语 26 个字母写多少不受限制一样,计算
机的 2 个字母写多少也不受限制 。 代表两个字母的符号是 0 和 1, 我们通常认为计算机语言就

是二进制数 。 每个字母就是二进制元数字中的一个二进制位 (binary digit) 或一位 (bit) 。 计
算机服从于我们的命令,即计算机术语中的指令 (instruction) 。 指令是能被计算机识别并执行
的位串,可以将其视为数字 。 例如,位串
1000110010100000

告诉计算机将 2 个数相加 。 第 2 章将解释为什么数字元既表示指令又表示数据 。 我们不希望在

此处涉及第 2 章的具体内容,但是使用数字既表述指令又表示数据是计算机的基础 。

3

二进制位:也称为位 。 基数为 2 的数字中的 0 或 1' 它是信息的基本组成元素 。

3

指令:计算机硬件所能理解并服从的命令 。

第一代程序员是直接使用 二 进制数与计算机通信的,这是 一 项非常乏味的工作 。 所以他们
很快发明了助记符,以符合人类的思维方式 。 最初助记符是手工翻译成二进制的,其过程显然
过于烦琐 。 随后设计人员开发了一种称为汇编程序 (assembler) 的软件,可以将助记符形式的
指令自动翻译成对应的 二 进制 。 例如,程序员写下

9

计算机概要与技术

ad d

A,B

汇编程序会将该符号翻译成

1000110010100000
该指令告诉计算机将 A 和 B 两个数相加 。 这种符号语言的名称今天还在用,即汇编语言 (as­

semhly language) 。 而机器可以理解的 二 进制语言是机器语言 (machine language) 。
3

汇编程序:将指令由助记符形式翻译成二进制形式的程序 。

3

汇编语言:以助记符形式表示的机器指令 。

3

机器语言:以二进制元形式表示的机器指令 。

虽然这是一个巨大的进步,但汇编语言仍然与科学家用来模拟液体流动或会计师用来结算

账目所使用的符号相去甚远 。 汇编语言 需 要程序员写出计算机执行的每条指令,要求程序员像

计算机一样思考 。

口i

认识到可以编写一个程序来将需要更强大的高级语言翻译成计算机指令是计算机早期的一
个重大突破 。 高级编程语言 (high-level programming language) 及其编译程序大大地提高了软件

的生产率 。 图 1-4 表示了这些程 序 和编程语言之间的关系,这是抽象的另外 一 个例子 。
高级语言程序
( 使用 C语言)

汇编语言程序

swap(int v[]. int kl
lint temp:
temp= v[k]:
v[k] = v[k+l]:
v[k+l] = temp;

s wap:

( MIPS 指令集 )

multi
add
lw
lw
SW
SW

j r

二进制机器

语言程序
(MIPS 指令集 )

图 1-4

$2 , $5,4
$2 , $4,$2
$15, 0($2)
$16, 4($2)
$16 , 0($2)
$15, 4($2)
$31

00000000101000100000000100011000
00000000100000100001000000100001
10001101111000100000000000000000
10001110000100100000000000000100
10101110000100100000000000000000
10101101111000100000000000000100
00000011111000000000000000001000

C 程序编译为汇编语言程序,再汇编为 二 进制机器语言程序 。 尽管将高级语言翻译成二进制的机
器语言仅需要两步,但一些编译器将 “ 中间人"砍掉,直接产生 二 进制的机器语言 。 这些语言

和本图中列举的程 序 将在第 2 章详细检测

口3

笫 l 章

10

高级编程语言 : 如 C 、 C + +、 Java 、 Visual Basic 等可移植的语言,由一些单词和代数符

3

号组成,可以由编译器转换为汇编语言 。

编译程序使得程序员可以写出高级语言表达式 :
A+ B
编译程序将其编译为如下的汇编语言语句 :
add A.B

然后,汇编程序将此语句翻译为 二 进制元指令,告诉计算机将这两个数 A 和 B 相加 。
使用高级编程语言有以下几个好处 。 第 一 ,可以使程序员用更自然的语言来思考,用英文

和代数符号来表示,形成的程序看起来更像文字而不是密码表(见图 1-4) 。 而且,它们可按
用途进行设计 。 例如, Fortran 是为科学计算设计的, Cobol 是为商业数据操作设计的, Lisp 是

为符号操作设计的,等等 。 还有一些特定领域的语言,只为少数专业人群设计,如流体仿真的
研究人员 等 。
第二,高级语言提高了程序员的生产率 。 如果使用较少行数的编程语 言 即可表示出设计用
意,则可加速程序的开发,这是软件开发方面少有的共识之一。 简明性是高级语言相对汇编语

言最为明显的优势 。
第 三 ,采用高级语言编写程序提高了程序相对千计算机的独立性,因为编译程序和汇编程
序能够把高级语言程序翻译成任何计算机的 二 进制元指 令 。 高级编程语言的这些好处,使其直
到今天仍应用广泛 。

1. 4

硬件概念入门
我们已经在上节通过程序揭示了计算机软件,在本节中我们将打开机箱盖学习其中的硬

件 。 任何 一 台计算机的基础硬件都要完成相同的基本功能:输入数据 、 输出数据 、 处理数据和

存储数据 。 本书的主题就是描述这些功能是怎样完成的,随后各章将分别讨论这 4 项任务 。
本书在遇到重要知识点时,都会用“重点”标题加以强调,希望读者对其重点记忆 。 全
书大致有 10 多个重要知识点,这里是第 一个 ,即计算机是由完成输入 、 输出、处理和存储数
据任务的 5 个部件构成的 。
计算机的两个关键部件是 输入设备 (input device) 和 输出设备 (output device) , 例如麦克

风是输入设备,而扬声器是输出设备 。 输入为计算机提供数据,输出将计算结果送给用户 。 像
无线网络等设备既是输入设备又是输出设备 。

口豆]

3

输入设备:为计算机提供信息的装置,如键盘 。

:>

输出设备:将计算结果输出给用户(如显示器)或其他计算机装置 。

第 5 章和第 6 章将详细介绍 VO 设备,这里由外部 VO 设备开始先对计算机硬件做 一些基
本的介绍 。

砃 重点

组成计算机的 5 个经典部件是输入、输出、存储器 、 数据通路(在计算机中也称运

算器)和控制器,其中最后两个部件通常合称为处理器 。 图 1- 5 表示了一台计算机的标准
组成 。 该组成与硬件技术无关,你总能够把任何计算机(无论是现在的还是过去的)中

的任何部件归于这 5 种之一 。 为了加深读者对这一重点的印象,我们将在每章开始都给出
此图 。

计算机概要与技术

11

接口

评价性能

图 1-5

组成计算机的 5 个经典部件 。 处理器从存储器中得到指 令 和数据,输入部件将数据写入存储器,

输出部件从内存中读出数据,控制器向数据通路 、 存储器、输入和输出部件发出命令信号

1. 4. 1

显示器

最吸引人的 1/0 设备应该是图形显示器了 。 大多数个人移动设备都用液晶显示 (Liquid

Crystal Display, LCD) 来获得轻巧 、 低功耗的显示效果 。 LCD 并非光源,而是控制光的传输 。
典型的 LCD 内含棒状液态分子团形成的转动螺旋线,用来弯曲来自显示器后方的光线或者少

量的反射光线 。 当电流通过时,液态分子棒不再弯曲,也不再使光线弯曲,由于两层相互垂直
的偏光板之间充满液晶材料,如果它不弯曲则光线不能通过 。

(在不施加任何电压的情况下,

液晶处于初始状态,并将入射光的方向扭转 90°' 让背光源的入射光能够通过整个结构,在显
示屏上呈现白色;而当施加电压时,光线不再弯曲,显示屏呈现为黑色 。 )今天,大多数 LCD

显示器采用动态矩阵显示 (active matrix display) 技术,其每个像素 (pixel) 都由一个晶体管
精确地控制电流,使图像更清晰 。 在彩色动态矩阵 LCD 中,还有一个红 -绿-蓝 屏决定三种
颜色分量的强度,每个点需要 3 个晶体管开关 。
3

液晶显示:这是一种显示技术,用液体聚合物薄层的带电或者不带电来传输或者阻止光线

3

动态矩阵显示:一种液晶显示技术,使用晶体管控制单个像素上光线的传输 。

3

像素:图像元素的最小单元 。 屏幕由成千上万的像素组成的矩阵而形成 。

的传扴 。

道过什算机皇示昙,我特飞机伶诏在航空母舰的甲板上,观睿钊一个原 5 打钊鲁
料中,秉着火倩 4 杜近光的速太飞翱,司忖我了斛钊什算机最深层的工作原隍 。
—一 I如 Sut加侐tf, 什算机出彤学之父, ( Scierz咕心mmcan〉, 1984

口工:

第 1 章

12

图像由像素矩阵组成,可以表示成 二 进制位的矩阵,称为位图 (bitmap) 。 针对不同的屏
幕尺寸及分辨率,典型的屏幕中显示矩阵的大小可以从 I 024 x768 到 2 048

X

1 536 。 彩色显示

器使用 8 位来表示每个 三原色(红 、 绿和蓝),每个像素用 24 位表示,可以显示百万种不同的
颜色 。
计算机硬件采用光栅刷新缓冲区(又称为帧缓冲区)来保存位图以支持图像 。 要显示的

图像保存在帧缓冲区中,每个像素的 二 进制值以刷新频率读出到显示设备 。 图 1-6 显示了 一 个
用 4 位表示 一 个像素的简化设计的帧缓冲区 。
帧缓冲区
光栅扫描 CRT显示器

YoyI

Yoy

xo

图 1-6

尤

X。

x,

左边的帧缓冲区中每个坐标决定了右边光栅扫描 CRT 显示中相应坐标的灰度 。 像素 (Xo'~。)
的灰度值是 001 I, 小于像素 (X,, Y,) 的灰度值, (X,, Y,) 的灰度值是 1101

使用位图的目的是如实地在屏幕上进行显示 。 因为人眼可以分辨出屏幕上的细小变化,所

口团]

以图像系统面临着挑战 。

1. 4. 2

触摸屏

PC 使用 LCD, 而后 PC 时代的平板电脑和智能手机使用接触敏感的显示设备替代了键盘和
鼠标,拥有良好的用户界面,用户直接指向感兴趣的内容,而不需要使用鼠标 。
触摸屏可采用多种方式实现,许多平板电脑采用电容感应实现 。 如果绝缘玻璃上覆盖一层
透明的导体,人的手指接触到屏幕范围时,由于人是导体,将会使屏幕的电场发生变化,进而
导致电容的变化 。 这种技术允许同时接触多个点,可提供非常好的用户界面 。

1. 4. 3

打开机箱

图 1- 7 给出了 Apple iPad 2 平板电脑的内部结构 。 不难看出,在计算机的五大传统部件中
的 VO 是该设备的主要部分 。 iPad 2 的 VO 设备包括一个电容性的多触点 LCD 、前置摄像头、

后置摄像头、麦克风、耳机插孔、扬声器、加速计 、 陀螺仪 、 Wi-Fi 网络和蓝牙网络 。 其数据

通路、控制器和存储器只占很小 一 部分 。
图 1-8 中的小长方形是集成电路 (integrated c订cuit) , 俗称芯片 (chip) 。 其中心标有 A5 的

芯片中含有两个运行频率为 1GHz 的 ARM 处理器 。 处理器是计算机中最活跃的部分 。 它严格按

照程序中的指令运行,将数字相加,测试结果,并按结果发出控制信号使 VO 设备做出动作,
等等 。 有时候,人们把处理器称为 中央处理单元 ( central processor unit) , 即 CPU 。

3

集成电路:也叫芯片,一种将几十个至几百万个晶体管连接起来的设备 。

3

中央处理器单元:也称为处理器,处理器是计算机中最活跃的部分,它包括数据通路和控
制器,能将数字相加,测试结果,并按结果发出控制信号使 VO 设备动作等 。

计算机概要与技术

图 1 -7

13

.-\pple iPad2 Al395 的组成 : 中间是 iPad 的金属背板 ( 中心是倒置的 Apple 标志),顶部是电容性
洼摸屏和 LCD c 最右端是 3. 8V 、 25\\ · h 的聚合物电池 . 它包含 三块梩离子电池芯,可以供电 10

小 时 C 最左端是将 LCD 固定在背板上的金属外壳 。 在金属背板周围的小部件组成了我 们熟知的计
算机 . 它们在金属壳内位于电池旁边,呈 L 型排布 。 图 1-8 显示了靠近金属外壳左 下 部 L 型的逻

揖主板的详细情况,上面有处理器和存储器,其下面的小方块中包含了提供无线通信的芯片,即
\\i- Fi 、 蓝牙和调频调谐器,它可以插在逻辑主板左下角的插槽中 3 外壳左上角是另外- 个 L 型
部件 . 它是前置摄像组件 . 包括摄像头 、 耳机插孔和麦克风 之 外壳右上角的 电路板除了 加速计和
陀螺仪 .还包含了音量控刮和静音/屏幕旋转锁定按钮 。 加速计和陀螺仪使得 iPad 可 识别 6 向移
动 。 旁边的小方块是后置摄像头 已 外壳右下角是 L 型的扬声器组件 。 底部的电缆连 接逻辑主板 和

摄像厅芸音控制电路板 。 电缆和扬声器组件之 间的电路板是电容性触摸屏的控制器 ( iFi立 友情提
供, Wl'i飞. ifu:iL com )

图 1-8

图 1 - 7 中 Apple iPad 2 的逻辑主板 。 图中突出了 5 块集成 电 路 。 中部的大 IC 是 Apple A.5 芯片
包含了一个主频 1GHz 的双核 AR..\I 处理器和 512:\18 的主存 e 图 1-19 是 心 中处 理器 芯片的照

片 亡 左边大小相当的芯片是 32GB 的非易失性的闪存芯片 。 两块芯片 之 间的空间可以安装第二块
存储器来扩展 iPad 的存储容量 。 心 右边的芯片包含了电濒控刮和 l/0 控刮芯片 ( 币立友情提
供, ""'"''·ifujt com )

为进 一 步理解硬件,图 1-9 展示了 一 款微处理器的内部细节 。 处理器从逻辑上包括两个 主
要部件 : 数据通路和控制器.分别相当千处理器的肌肉和大脑 。 数据通路 ( datapath } 负 责完

成算术运算 ,控制器 ( control ) 负责指导数据通路、存储器和 110 设备按照程序的指令正确执
行 e 第 4 章将进一步详细说明数据通路和控制器 。
二

数据通路 :是 处 理器中 执行算术操作的部分 。

3

控制器 : 处理器中根据程序的指令指挥数据通路、存储 器和 l/ 0 设备的 邻分 。

笫 1 章

14

图 1-9

A5 内部的处理器集成电路。 芯片尺寸为 12. 1mm X 10. Imm, 采用 45nm 工艺制造(见 1.5 节) 。 左半部

分靠中间的位置是两个相同的 ARM 处理器,左上角的四分之一部分是具有 4 条数据通路的图形处理
器单元 (Graphic Processor Unit, GPU) , 左下角和底部是与主存的接口 (Chipworks 友情提供,

www.chipworks. com)
图 1-8 中的心芯片中还有两块存储器芯片,每块容 摸 2 gigabit, 共 512MiB 。 内存 (memo­

ry) 是程序运行时的存储 空 间,它同时也用于保存程序运行时所使用的数据 。 内存由 DRAM 芯

片组成 。 DRAM 是 dynamic

random access memory

(动态随机访问存储器)的缩写 。 内存由多片

DRAM 芯片组成,用来承载程序的指令和数据 。 与串行访问内存(如磁带)不同的是,无论数
据存储在什么位置, DRAM 访问内存所需的时间基本相同 。
3
~

内存:程序运行时的存储空间,同时还存储程序运行时所需的数据 。

DRAM: 动态随机访问存储器,集成电路形式的存储器,可随机访问任何地址的内存 。 在
2012 年,其访问时间大约为 50ns, 每护gabyte 的价格为 5 ~ 10 美元 。

进一步深入了解任何 一 个硬件部件会加深对计算机的理解 。 在处理器内部使用的是另外 一

计算机概要与技术

15

种 存储器一缓存 。 缓存 (cache memory) 是一 种小而快的存储器, 一 般作为 DRAM 的缓冲

(缓存的 一 个非技术性的定义是 一 个隐藏 事 物的安全地方) 。 cac he 采用的是另 一 种存储技术,
集,因 此价格比 DRAM 更 贵 (见 第 5 章 ) 。 SRAM 和 DRAM 是 存储器层次中的两 层 。
3

缓存:缓存是一种 小而快的存储 器, 一般作为大而慢的存储器的缓冲 。

3

静态随机访问存储器 :一种 集成电路形式的存储器,但是比 DRAM 更快, 集成度更低 。

尸

称为静 态随机访问存储器 (Stati c Random Access Memory, SRAM) , 其速度更快而且不那么密

如前所述,改进设计的 一 个伟大思想是抽象 。 最重要 的抽象之 一 是 硬件和底 层软 件之间
的接口 。 鉴于其重要性,该抽象被命名为计算机的 指令集体系结构 (instruction set architec-

lure) , 或简称 体系结构 (architec ture) 。 计算机体系结构包括程序员正确编写二进制机器语
言程序所需 的 全部信息 ,如指 令、 VO 设备等 。一 般来说,操作系统需要封装 VO 操作、存
储器分配和其他低级的系统功能细节,以便应用程序员无 需在 这些细节上分心 。 提供给应
用程序员的基本指令 集 和操作系统接口合称为应用二进制接口

(Application Binary Interface,

ABI) 。

3

指令集体系结构:也叫体系结构,是低层次软件和硬件之间的抽象接口,包含了需要编写

3

应用二进制接 口:用户 部分的指令加上应用程序员调用的操作系统接 口,定义了二进制层

正确运行的机器语言程序所需要的全部信息,包括指令 、 寄存器 、 存储访问和 VO 等 。
次可移植的计算机的标准 。

计绊机体系结构可以让计算机设计者独 立 地讨论功能,而不必考虑具体硬件 。 例如,我们

讨论数字时钟的功能(如计时、显示时间 、 设 置 闹钟)时,可以不涉及时钟的硬件(如石英
晶体 、 LED 显示 、 按钮) 。 计算机设计者将体系结构与体系结构的实现 (implementation) 分开

考虑也是沿着同样的思路:硬件的实现方式必须依照体系结构的抽象。这些概念产生了另一个
重点 。
3

实现:遵循体系结构抽象的硬件 。

配重点

无论硬件还是软件都可以使用抽象分成多个层次,每个较低的层次把细节对上层隐

藏起来 。 抽象层次中的一个关键接口是指令集体系结构一—项U牛和底层软件之间的接口。

这一抽象接 口 使得同一软件可以由成本不 同 、性能也不同的实现方法来 完成 。

1. 4. 4

数据安全

目前为止,我们已经理解了如何输入数据,如何使用这些数据进行计算,以及如何显示结
果 。 然而 , 一 旦 关掉电源,所有数据就 丢失了 ,因为计算机中的内存是易失性存储器 (volatile

memory) 。 与 之不同的是,如果关掉 DVD 机的电源,所记 录 的内容将不会丢失,因为 DVD 采
用的 是 非易失性存储器 (nonvolatil e memory) 。

3

易失性存储器:类似 DRAM 的存储器,仅在加电时保存数据 。

3

非易失性存储器:在掉电时仍可保持数据的存储器,用于存储运行间的程序,例如 DVD 。

为 了区 分易失性存储器 与非易失性存储器,我 们将前者称为主存储器 (main memory 或
primary memory) , 将后者称为二级存储器 ( secondary memory) 。二 级存储器形成了存储器层次
中下面更低的 一 层 。 DRAM 自 1975 年起在主存储器中占主导地位,而 磁盘 (magnetic disk) 在

口工

笫 1 章

16

二 级存储器中占 主导地位的时间更早 。 由 于 器件尺寸和前面所述的特点,非易失性半导体存储
器一闪存 (flash memory ) 在个人移动设备中替代了磁盘 。 图 1-8 所示的 iPad 2 中的芯片上包

含了闪存 。 除了非易失性外,闪存比 DRAM 慢 , 但却便宜很多 。 虽然每位的价格高于磁盘 , 但
是 闪存在 体积 、 电容 、 可 靠 性和能耗方面都优于磁盘 。 因此闪存是 PMD 的 二 级存储器的标准 。
遗憾的 是 ,与硬盘和 DRAM 不同的是,闪存具有 写 100 000 -1000000 次后老化或损坏的弱点 。

因此,文件系统必须记录写操作的数目,而且具备避免存储器损坏的策略,例如,避免移动经
常使用的数据 。 第 5 章将会详细介绍磁盘和闪存 。
3

主存储器:也叫主要存储器 。 这个存储器用来保持运行中的程序,在现代计算机中一般由
DRAM 组成 。

3

二级存储器:非易失性存储器,用来保存两次运行之间的程序和数据。 在个人移动设备中

一般由闪存组成,在服务器中由磁盘组成 。

3

磁盘:也叫硬盘 (hard disk) , 是使用磁介质材料构成的以旋转盘片为基础的非易失性二
级存储设备 。 因为是旋转的机械设备,所以磁盘的方位时间大约是 5 -20 毫秒, 2012 年每
g 宇节的价格大约为 0. 05 - 0. 1 美元 。

3

闪存:一种非易失性半导体内存,单位价格和速度均低于 DRAM, 但单位价格比磁盘高,速度
比磁盘快 。 其访问时间大约为 5-50 毫秒, 2012 年每 g 字节的价格大约为 0.

1. 4. 5

75

-1 美元 。

与其他计算机通信

我们已经介绍了如何输入 、 计算 、 显示和保存数据,但对千今天的计算机来说,还有 一 项
不可缺少的功能:计算机网络 。 如图 1-5 所示,处理器与存储器和 VO 设备连接 。 通过网络,
计算机可以与其他计算机通信,从而扩展计算能力 。 当今网络已经十分普遍,逐步成为了计算
机系统的主干 。 一 台新型个人移动设备或服务器如果没有网络接口将是十分可笑的 。 联网的计
算机具有如下几个主要优点:

• 通信 : 在计算机之间高速交换信息 。
• 资源共享:有些 VO 设备可以由网络上的计算机共享,不必每台计算机都配备 。
• 远距离访问:用户可以不必在计算机的旁边,而是在很远的地方使用计算机 。
根据传输速度以及信息传输的距离,通信代价随之增长,网络的传输距离和性能是多种多
样的,最为普遍的网络类型是以太网 。 它的传输距离可达到 1 000 千米,传输速率可达到

口江

40Gbps 。 以太网的传输距离和速率可以将 一 个建筑物中同 一 层的计算机连接起来,这就形成了
通常称为局域网 (Local Area Network , LAN) 的一个例子 。 局域网通过交换机进行连接,可以
提供路由与安全服务 。 广域网可支持万维网 (World Wide Web), 作为因特网的骨干网,以光

纤为基础并向通信公司租用 。
3

局域网:一种在一定地理区域(例如在同一栋大楼内)使用的传输数据的网络 。

3

广域网:一种可将区域扩展到几百千米范围的网络 。

在过去的 30 年 间,因为广泛的使用和性能的大幅度提升,网络已经改变了计算的方式 。 在
20 世纪 70 年代,个人很难接触到电子邮件,网络和 Web 还不存在,物理上的邮件介质磁带成为
传输两地之间大容量数据的主要载体 。 局域网根本不存在,少数几个广域网限制了容量和访问 。

随着网络技术的进步,网络变得越来越便宜,速度越来越快 。 在 30 多年前,第一个标准
局域网的最大带宽为 lOMbps, 支持数十台计算机共享工作 。 今天,局域网技术已能提供从

lOOMbps - lOGbps 的带宽 。 光通信技术已经使广域网有了类似的发展,从几百 Kbps 到 Gbps 的

计算机概要与技术

17

带宽,支持 几百台到几百万台计算机与全球网络互连 。 网络规模的飞速扩大,伴随着带宽的急
剧增长,使得网络技术成为最近 30 年来信息革命的中心 。
最近 10 年来,新的联网创新变革了计算机通信的方式 。 推动后 PC 时代 (PostPC Eva) 的
无线技术广泛应用,加上原本用来生产无线电的廉价的半导体 (CMOS) 技术被用来生产存储
器和微处理器,使其价格大幅度降低,产量剧增 。 当前无线通信技术 (IEEE 标准 802. 11) 支

持从 I Mbps 到近 lOOMbps 的传输速率 。 无线技术和基于线路的网络相当不同,因为所有用户可
以在最近的区域里共享电波 。

配} 小测验
半导体 DRAM 、 闪存和磁盘存储有很大差别 。 试从易失性、访问时间和价格三方面进行

比较 。

处理器和存储器制造技术

1. 5

处理器和存储器正在以难以置信的速度进步,因为计算机设计者一直采用最新的电子技术
进行设计,以期在竞争中取得优势 。 图 1 -10 描述了不断进步的各种新型技术,包括其出现的

_

卫互]

时间和性价比 。 这些技术确定了计算机能够做什么,以及以多快的速度发展变化 。 我们相信,
所有计算机专业人员都应该熟悉集成电路的基础知识 。

1951
1965
1975
1995
2013

图 1-10

计算机中采用的技术

真空管

晶体管
集成电路
超大规模集成电路

甚大规模集成电路

相对性价比

I
35
900
2 400 000
250 000 000 000

随着时间的发展,不同计算机实现技术的性价比 。 来源:波士顿计算机博物馆,其
中 2013 年的数据由作者推断得到(见 1. 12 节)

晶体管(廿an sistor ) 仅仅是一种受电流控制的开关 。 集成电路 (IC) 是由成千上万个晶体

管组成的芯片 。 当戈登·摩尔预测资源持续翻番时,他是在预测单芯片上晶体管数量的增长速

度 。 为了描述这些晶体管从几百个增长到成千上万的情形,形容词“超大规模”被添加到术
语中,简写为 V 区 I' 即超大规模集成电路 (very large- scale integrated circuit) 。

3

晶体管:一种由电信号控制的简单开关 。

3

超大规模集成电路:由数十万到数百万晶体管组成的电路 。

集成度的增长率是相当稳定的 。 图 1-11 表示自 1977 年以来 DRAM 容量的发展情况。近 20

多年以来,每隔 3 年 DRAM 的容量就增长 4 倍,累积增长已超过 16000 倍 。

为了理解集成电路的制造过程,我们从头开始介绍 。 芯片的制造从硅 (silicon) 开始,硅
是沙子中的一种物质 。 因为硅的导电能力不强,因此称为半导体 (semiconductor) 。用特殊的
化学方法对硅添加某些材料,可以把其细微的区域转变为以下 三 种类型之一:

•

良好的导电体(类似于细微的铜线或铝线) 。

•

良好的绝缘体(类似于塑料或玻璃膜) 。

• 可控的导电体或绝缘体(类似开关) 。
3

硅:一种自然元素,它是一种半导体 。

3

半导体:一种导电性能不好的物质 。

口u

笫 I 章

18

拦泄六 1至 q己玉)嘶妳
(

000000
匈000

10 000 000

ooo

l oolol

4M

IM

100

16K
10
1976 1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2006 2008 2010 2012
上架年份

图 1-11

单片 DRAM 容量随时间的增长 。 纵轴单位为 Kb, 其中 k 为 1 024 (210 位) 。 在近 20 多年中,平
均每隔 3 年 DRAM 容量扩大 4 倍,即每年增长约 60% 。 在最近几年中,增长速度有所下降,接
`近每 2 -3 年翻 一 番的水平

晶体管属千第 三 种 VLSI 电路,是由数亿个上述三 种材料组合起来并封装在 一 起所制成的 。
集成电路的制造过程对芯片的价格非常关键,因此对计算机设计者十分重要。 图 1-12 表
示了集成电路制造的整个过程 。 集成电路的制造是从 硅锭 (silicon crystal ingot) 开始的,它像
一根巨大 的香肠 。 目前使用的硅锭直径约 8 - 12 英寸,长度约 12 -24 英寸 。 硅锭经切片机切
成厚度不超过 0. 1 英寸的晶圆 (wafer) 。 这些晶圆经过 一 系列化学加工过程最终产生之前所讨

论的晶体管、导体和绝缘体 。 如今的集成电路只包含 一层 晶体管,但是可能具有多个绝缘层间
隔的 2-8 层金属导体 。

3

硅锭:一块由硅晶体组成的棒 。 直径大约在 8 - 12 英寸,长度约 12 -24 英寸 。

二

晶圆:厚度不超过 0. I 英寸的硅锭片,用来制造芯片 。

(

) - - - - EJ ----- cm - - - I

硅锭

空白晶圆

`

i

封装后的芯片

测试过的芯核

测试后的

口口
口因口区l
口口口口口
口口区口口

晶圆

口口口口
口口

20-40个

生产步骤

•

图样化的晶圆

-测试过的EJ•-~ 封装的芯片

由- [;;]-田- 气

图 1-12

芯片制造的全过程 。 从硅锭切下来之后,空白的晶圆经过大约 20 ~40 步的加工,产生图样化
的晶圆(见图 1- 13) 。 这些图样化的晶圆由晶圆测试器进行测试,测试后生成一 张图,表明哪

些部分是合格的 。 之后,这些晶圆被进一 步切成芯片(见图 1-9) 。 在本图中,一个晶圆能生

产 20 个芯片,其中有 17 个通过测试 (X 意味着这个芯片是坏的) 。 本例中芯片的良率(又称
成品率)是 17/20, 也就是 85% 。 这些合格芯片被封装起来并且在发布给用户之前经过多次测
试 。 不合格的封装会在最终测试中被发现

计算机概要与技术

19

晶圆中或是在图样化的几十个步骤中出现一个细微的瑕疵就会使其附近的电路损坏,这些
瑕疵 (defect) 使得制成一个完 美的晶圆几乎是不可能 的 。 有几种策略可以解决这一问题,最
简单的策略是把晶圆切分成许多独立的晶圆,也就是现在所称的芯片 (die) , 更正式的叫法是
咖p 。图 1-13 所示就是切分前的微处理楛晶圆,而图 1-9 则是单个微处理器芯片 。

图 1-13

区五l

Intel Core i7 芯片的 12 英寸 (300mm) 晶圆 (Intel 提供) 。 良率为 100% 的圆片中的晶圆的数目
是 280, 每个为 20. 7mm x 10. 5mm 。 晶圆边缘几十个不完整的芯片是没用的。之所以包含它们,
是因为这样给硅片生产掩膜相当容易 。 芯片使用 32nm 的工艺,这意味着最小的晶体管的尺寸
几乎接近 32nm, 尽管它们通常比实际的特征尺寸还要小,这个特征尺寸是将晶体管“图纸尺
寸”和最终的生产尺寸相比得出的

通过切分,可以只淘汰那些有瑕疵的芯片,而不必淘汰整个晶圆 。 对这一过程的量化描述
可以用成品率 (yi eld) 来表示 ,其定义为合 格芯片数占总芯片数的百分比 。
3

瑕疵:晶圆上一个微小的缺陷,或者在图样化的过程中因为包含这个缺陷而导致芯片
失效 。

3

芯片:从晶圆中切割出来的一个单独的矩形区域,更加正式的英文名称是 chip0

3

成品率:合格芯片数占总芯片数的百分比 。

当芯片尺寸增大时,集成电路的价格会快速上升,因为成品率和晶圆中芯片的总数都下降
了。为了降低价格,大芯片常采用下一代工艺进行尺寸收缩(包括晶体管和导线),从而改进
每晶圆的芯片数和成品率 。 2012 年的典型工艺尺寸为 32nm, 这意味着芯片上的最小特征尺寸

是 32nm 。

卫了

合格芯片要连接到 1/0 引脚上,这一过程称为封装。在封装之后,必须进行最后一次测
试,因为封装过程也可能出错 。 最后芯片被交付给用户 。

配精解

集成电路的成本可以用下面 3 个简单公式来表示:

笫 1 章

20

每芯片的价格=每晶圆的价格/(每晶圆的芯片数 x 成品率)
每晶圆的芯片数=晶圆面积 /芯 片面积

成品率 =11(1+( 单位面积的瑕疵数 x 芯片面积 /2) )2
第 1 个公式是直接导出的 。 第 2 个公式是近似的,因为没有减去晶圆边上不满足 芯片 矩形
要求的面积(参见图 1 -13 ) 。 第 3 个公式是基于集成电路工厂的成品率经验,与重要加工
步骤的数量呈指数关系 。

因此,芯片的成本取决于成品率以及芯片和晶圆的面积,与芯片面积之间的关系一般
不是线性的 。

配] 小测验
产量是决定集成电路价格的关键因素。下列哪些理由说明了芯片产量越高成本就越低?

1. 高产撮使得在制造过程中能够适当调节设计,从而提高成品率 。

2. 设计高产量芯片的工作量比设计低产量芯片小 。
3. 制造芯片用的掩膜很贵,产量高时每芯片的掩膜成本就低 。

4. 工程开发的成本高,并且基本与产量无关,故产量高时每芯片的开发成本较低 。
5. 产量高时,通常每芯片的面积比产量低时小,因此成品率较高。

性能

1. 6

对计算机的性能进行评价是富有挑战性的 。 由千现代软件系统的规模及其复杂性,加上硬
件设计者采用了大量先进的性能改进方法,使性能评价极为困难 。

区

在不同的计算机中挑选合适的产品,性能是极其重要的因素之一 。 精确地测量和比较不同
计算机之间的性能对千购买者和设计者都很重要 。销售 计算机的人也需要知道这些 。 销售人员
通常希望用户看到他们的计算机表现最好的 一面,无论这一面是否 能准确地反映购买者的应用

需求 。 因此,理解怎样才能更合理地测 量性能 以及测定所选择的计算机的性能限制相当重要 。
本节将首先介绍性能评价的不同方法,然后分别从计算机用户和设计者的角度描述性能测
量的度量标准,最后还要分析这些度量标准之间有什么联系,并提出经典的处理器性能方程
式,我们在全书中都要使用它进行性能分析 。

性能的定义

1. 6. 1

当我 们说一 台计算机比另一台计算机具有更好的性能时意味着什么?虽然这个问题看起来
很简单,但实际上却内藏玄机 。 我们可以先用客机问题模拟 一 下 。 图 1-14 表示若干典型客机
的型号、载客量、航程 、 航速等参数 。 如果我们要指出表中哪架客机的性能最好,那么我们首

_ _ ...

先要对性能进行定义 。 如果考虑不同的性能度量,那么性能最佳的客机是不同的 。 我们可以看
到,巡航速度最高的是 Concorde, 航程最远的是 DC-8-50, 载客量最大的是 747 。

一,

1 波音111

u

波音747

图 1-14

I

I

375
470
132
146

4 630
4 150
4000
8 720

610
610
I 350
544

228 750
286 700
178 200
79424

若干商用飞机的载客量、航程和航速 。 最后一列展示的是飞机运载乘客的速度,它等于容

量乘以航行速度(忽略距离、起飞和降落次数)

计算机概要与技术

21

即使假定用速度来定义性能,这里仍然有两种可能的定义 。 如果你关心点对点的到达时
间,那么可以将只搭载一名旅客的巡航速度最快的客机认为是性能最好的 。 如果你关心的是运

输 450 名旅客,那么如图中最后一列所示, 747 的性能是最好的 。 与此类似,我们可以用若干
不同的方法来定义计算机性能 。
如果你在两台不同的桌面计算机上运行同一个程序,那么你可以说首先完成作业的那台计算
机更快 。 如果你运行的是一个数据中心,它有好几台服务器供很多用户投放作业,那你应该说在
一天 之内完成作业最多的那台计算机更快 。 个人计算机用户会对降低晌应时间 (response time)

感兴趣,响应时间是指从开始一个任务到该任务完成的时间,又称为执行时间 。 而数据中心感

卫汇

兴趣的常常是吞吐率 (throughput) 。 因此,在很多情形下,和关注吞吐率的服务器相比,我们
需要对嵌入式以及台式 计算机采用不同的应用程序 作为测试基准和不同的性能度 量标准。

3

响应时间:也叫执行时间

( execution time) , 是计算机完成某任务所需的总时间,包括硬

盘访问 、 内存访问 、 1/0 活动、操作系统开销和 CPU 执行时间等 。
二

吞吐率:也叫带宽 (bandwidth) , 性能的另一种度量参数,表示单位时间内完成的任务
数量 。

庄 例题 · 吞吐率和响应时间
下面两种改进计算机系统的方式能否增加其吞吐率或减少其响应时间,或既增加其吞吐率
又减少其响应时间?

1. 将计算机中的处理器更换为更高速的型号 。
2. 增加多个处理器来分别处理独立的任务,如搜索万维网 。

配} 答案
一 般来说,降低响应时间几乎都可以增加吞吐率 。 因此,方式 l 同时改进了响应时间和吞
吐率 。 方式 2 不会使任务完成得更快,只会增加其吞吐率 。

D

但是,当 需 要处理更多的任务时,系统可能需要令后续请求排队 。 在这种情况下,随着吞
吐率的增加,可同时改进响应时间,因为这缩小了排队等待时间 。 所以,在实际的计算机系统
中,响应时间和吞吐率往往相互影响 。

在讨论计算机性能时,本书前几章将主要考虑响应时间方面 。 为了使性能最大化,我们希
望任务的响应时间或执行时间最小化 。 对于某个计算机 X, 我们可以表达为:
性能 X = 1/ 执 行时间 X
如果有两台计算机 X 和 Y, X 比 Y 性能更好,则
性能 X >性能 Y
1/ 执行时间 X > 1 / 执行时间 Y
执行时间 y >执 行时间 X

也就是说,如果 X 比 Y 快,那么 Y 的执行时间比 X 长 。
在讨论计算机设计时,经常要定量地比较两台不同计算机的性能 。 我们将使用 "X 是 Y 的
n 倍快"的 表态方式, 即

性能 xi 性能 v = n

如果 X 比 Y 快 n 倍,那么在 Y 上的执行时间是在 X 上执行时间的 n 倍,即
性能 XI 性能 Y= 执行时间 YI 执行时间 X=n

配例题 · 相对性能
如果计算机 A 运行一个程序只 需要 10 秒,而计算机 B 运行同样的程序 需要 15 秒,那么计

巨汇

笫 1 章

22

算机 A 比计算机 B 快多少?

配} 答案
我们知道, A 是 B 的 n 倍快,则

性能 A l性能 B = 执行时间 EL 执行时间 A = n
故性能比为
。

15/ 10 = 1. 5
因此 A 是 B 的 1.5 倍快 。
在以上的例子中,我们可以说,计算机 B 比计算机 A 慢 1.5 倍,因为
性能 A l 性能 B = l, 5
意味着

勹工]

性 能 / 1. 5 = 性 能 B
简单地说,当我们试图将计算机的比较结果 蜇 化时,我们通常使用术语“比什么快" 。 因
为性能和执行时间是倒数关系,提高性能就 需 要减少执行时间 。 为了避免对术语“增加“和

“降低“潜在的误解,当我们想说”改 善 性能”和“改 善 执行时间”的时候,我们通常说“增
加性能”或者“降低执行时间” 。

1. 6. 2

性能的度量

如果用时间来度量计算机的性能,那么完成同样的计算任务, 需 要时间最少的计算机是最
快的 。 程序的执行时间一般以秒为单位 。 然而,时间可以根据我们的计量 方法选用不同的表示
方法 。 对时间最直接的定义是墙上时钟时间 (wall clock time) , 也叫响应时间 (response time) 、

消逝时间 (elapsed time) 等 。 这些术语均表示完成任务所需的总时间,包括了硬盘访问、内存

访问、 VO 操作和操作系统开销等一 切时间 。
多用户经常共享同 一 计算机, 一 个处理器 需 要同时运行儿个 程 序 。 在这种情况下,系统可

能更侧重千优化吞吐率,而不是最小化一 个程序的响应时间 。 因此,我们往往要把运行我们自
己的任务的时间 与一般的响应时间区别开来 。 我们可以使用 CPU 执行时间 ( CPU execution

time) , 简称 CPU 时间,它只表示在 CPU 上花费的时间,而不包括 等 待 VO 或运行其他程序的
时间 。

(需要注意的是,用户所感受到的是程序的响应时间,而不是 CPU 时间 。 ) CPU 时间还

可进一步分为用于用户程序的时间和操作系统为用户服务花去的 CPU 时间 。 前者称为用户
CPU 时间 ( user CPU time) , 后者称为 系统 CPU 时间 (system CPU time) 。 要精确区分这两种

CPU 时间是困难的,因为通常难以分清哪些操作系统的活动是属于哪个用户程序的,而且不同
操作系统的功能也于差万别 。

:>

CPU 执行时间:简称 CPU 时间,执行某一任务在 CPU 上所花费的时间 。

3

用户 CPU 时间:在程序本身所花费的 CPU 时间 。

3

系统 CPU 时间:为执行程序而花费在操作系统上的时间 。

为了一致性,我们保持基于响应时间和基千 CPU 执行时间的性能差异 。 我们使用术语系
统性能 (system performance) 表示空载系统的响应时间,并用术语 CPU 性能 (CPU perform-

ance) 表示用户 CPU 时间 。 本章我们概括介绍了计算机性能,既适用千响应时间的度 量 ,也适

用千 CPU 时间的度量,但本章的重点将放在 CPU 性能上 。

砃理解程序性能

不同的应用关注计算机 系统 性 能 的不同 方 面 。 许 多应 用,特别是那些运行

计算机概要与技术

23

在服务器上的应用,主要关注 1/0 性能,所以此类应用既依赖硬件又依赖软件,对墙上时

[亘]

钟时间最感兴趣 。 而在其他一些应用中,用户可能对吞吐率、响应时间或两者的复杂组合
更为关注(例如,最差响应时间下的最大吞吐率) 。 要改进一个程序的性能,必须明确性
能的定义,然后通过测量程序执行时间来寻找可能的性能瓶颈 。 在后面的章节中,我们将
介绍如何在系统的各个部分寻找瓶颈,以改进性能 。
虽然作为计算机用户我们关心的是时间,但当我们深入研究计算机的细节时,使用其他的
度量可能更为方便 。 对计算机设计者来说,他们需要考虑如何度量计算机硬件完成基本功能的

速度 。 几乎所有计算机都用时钟来驱动硬件中发生的各种事件。时钟间隔的时间称为时钟周期

(clock cycle) 。 也可用它的倒数来描述,称为时钟频率 (clock rate) 。 例如,时钟周期为 250ps,
对应的时钟频率为 4GHz 。 在下一节,我们将形式化地定义硬件设计者的时钟周期和计算机使
用者所指的秒之间的关系 。

3

时钟周期:也叫 tick 、 clock tick 、 clock period 、 clock 或 cycle, 为计算机一个时钟周期的时

间,通常是处理器时钟,一般为常数 。
3

时钟长度:每个时钟周期持续的时间长度 。

卧小测验
1. 假设某个使用个人移动设备和云的应用受网络性能限制。那么对于下列 3 种方法,哪种
只改进了吞吐率?哪种同时改进了响应时间和吞吐率?哪种都没有改进?

a. 在个人移动设备和云之间增加一条额外的网络信道,从而增加总的网络吞吐率,并
减少获得网络访问的延迟(现在已经存在 2 条网络信道) 。

b. 改进网络软件,从而减少网络通信延迟,但并不增加吞吐率 。
c. 增加计算机的内存 。

2. 计算机 B 运行给定的应用需要 28 秒,而计算机 C 的性能是计算机 B 的 4 倍。请问计算
机 C 运行同样的应用需要多长时间?

1. 6. 3

CPU 性能及其因素

用户和设计者往往以不同的尺度看待性能 。 如果我们能掌握这些不同尺度之间的关系,就
能确定一个设计的变化对性能的影响 。 由于我们都关注 CPU 性能,因而性能度量实际上针对
的是 CPU 执行时间 。 下面一个简单的公式把最基本的尺度(时钟周期数和时钟周期时间)和
CPU 时间联系起来:

一个程序的 CPU 执行时间=一个程序的 CPU 时钟周期数 x 时钟周期时间
由于时钟频率和时钟周期时间互为倒数,故
一个程序的 CPU 执行时间=一个程序的 CPU 时钟周期数/时钟频率

这个公式清楚地表明,硬件设计者减少一个程序的 CPU 时钟周期数,或减少时钟周期时

间,就能改进性能。在后面几章中我们将看到,设计者经常要面对这些因素之间的权衡。许多
技术在减少时钟周期数的同时也会引起时钟周期时间的增加 。

厮例题 · 性能的改进
某程序在一台时钟频率为 2GHz 的计算机 A 上运行需要 10 秒 。 现在将设计一台计算机 B,

希望将运行时间缩短为 6 秒 。 计算机的设计者采用的方法是提高时钟频率,但这会影响 CPU 其
余部分的设计,使计算机 B 运行该程序时需要相当千计算机 A 的 1. 2 倍的时钟周期数 。 那么计

巨工

笫 1 章

24

算机设计者应该将时钟频率提高到多少?

配] 答案
我们首先要知道在 A 上运行该程序需要多少时钟周期数:

CPU 时间 A =CPU 时钟周期数/时钟频率 A

10 秒 =CPU 时钟周期数 /2 X 109 周期数/秒

卫江

CPU 时钟周期数 A= lQ 秒 X2 X 109 周期数/秒 =20 X 109 周期数
B 的 CPU 时间公式为:

CPU 时间 8 = 1. 2 x CPU 时钟周期数 Al 时钟频率 B

6 秒 = 1. 2 X20 X 109 时钟周期 数/时钟频率 B
时钟频率 8 = 1. 2 X20 X 109 时钟周 期数 /6 秒 = 0. 2 X20 X 109 时钟周期数/秒

=4 X 109 时钟周期数/秒 · =4GHz
因此,要在 6 秒内运行完该程序, B 的时钟频率必须提高为 A 的 2 倍 。

1. 6. 4

D

指令的性能

上述性能公式没有涉及程序所需的指令数 。 然而,由千计算机是通过执行指令来运行程序
的,因此执行时间一定依赖于程序中的指令数 。 一种考虑执行时间的方法是 ,执行时间 等千执

行的指令数乘以每条指令的平均时间 。 所以,一个程序需要的时钟周期数可写为:
CPU 时钟周期数=程序的指令数 x 每条指令的平均时钟周期数
术语 CPI (clock cycle per instruction) 表示执行每条指令所需的时钟周期数的平均值 。 不

同的指令需要的时间可能不同, CPI 是一个程序全部指令所用时钟周期数的平均值 。 CPI 提供
了比较相同指令集的不同实现方式的方法,因为一个程序执行的指令数是一样的 。

CPI: 每条指令的时钟周期数,表示执行某个程序或者程序片段时每条指令所需的时钟周

:>

期平均数 。

配] 例题 ♦ 性能公式的使用
假设我们有相同指令集的两种不同实现方式。计算机 A 的时钟周期为 250ps, 对某程序的
CPI 为 2.0; 计算机 B 的时钟周期为 500ps, 对同样程序的 CPI 为 1.2 。 对千该程序,请问哪台

卫汇]

计算机执行的速度更快?快多少?

配答案
我们知道,对于固定的程序,每台计算机执行的总指令数是相同的,我们用[来表示 。 首
先,求每台计算机的 CPU 时钟周期数:
CPU 时钟周期数 A

=l x2. 0

CPU 时钟周期数 8=lxl.2
现在,可以计算每台计算机的 CPU 时间:
CPU 时间 A =CPU 时钟周期数 AX 时钟周期时间=

I x 2. 0 x 250ps = 500 x fps

同理
CPU 时间 8

= / X 1. 2 X500ps = 600 X /ps

显然,计算机 A 更快 。 快多少由执行时间之比来计算
CPU 性能 A/CPU 性能 8 =执行时间 EL 执行时间 A

因此,对于该程序计算机 A 是计算机 B 的 1. 2 倍快 。

= 600 x /ps/500 x fps = 1. 2
D

计算机概要与技术

25

经典的 CPU 性能公式

1. 6. 5

现在我们可以用指令数 (instruction count) 、 CPI 和时钟周期时间来写出基本的性能公式:
CPU 时 间 =指令数 X

CPI X 时钟周期时间

或
CPU 时间=指令数 xCPV 时钟频率

这些公式特别有用,因为它们把性能分解为三个关键因素 。 如果知道实现方案或替代方案
如何影响这 三 个参数,我们可用这些公式来比较不同的实现方案或评估某个设计的替代方案 。

3

指令数:执行某程序所需的总指令数量 。

匡

配} 例题 · 代码段的比较
一 个编译器设计者试图在两个代码序列之间进行选择 。 硬件设计者给出了如下数据:

每类指令的 CPI

,,

I

3

2

对于某行高级语言语句的实现,两个代码序列所需的指令数量如下:

代码序列

1

IL

———

A

2-4

--

每类指令的数笾

I

n

I

c
2

1
I

2

哪个代码序列执行的指令数更多 ? 哪个执行速度更快?每个代码序列的 CPI 是多少?

砃答案
代码序列 1 共执行 2+1+2=5 条指令 。 代码序列 2 共执行 4+1+1=6 条指令。所以,代
码序列 l 执行的指令数更少 。

基于指令数和 CPI, 我们可以用 CPU 时钟周期公式计算出每个代码序列的总时钟周期
数为:
n

CPU 时钟周期数=

L (CPI;

X

C.)

;: I

因此

(2xl) +(1 x2) +(2x3) =2+2+6 = IO 周期
CPU 时钟周期数 2 = (4xl) +(1 x2) +(1 x3) =4+2+3 =9 周期

CPU 时钟周期敖=

故代码序列 2 更快,尽管它多执行了一条指令 。 由于代码序列 2 总时钟周期数较少,而指令数
较多,因此它一定具有较小的 CPI 。 CPI 的计算公式为:

CPI= CPU 时钟周期数/指令数
CPII = CPU 时钟周期氪/指令数 I = 10/5 = 2
CP4 = CPU 时钟周期数/指令数 2 = 9/6 = 1. 5

庄重点

o

图 1-15 给出了计算机在不同层次上的性能测试指标及其测试单位 。 通过这些指标

的组合可以计算出程序的执行时间(单位为秒) :

C豆

笫 1 章

26

执行时间=秒/程序 = 指令数/程序 x 时钟周期数/指令 x 秒/时钟周期

_

_

永远记住,唯一能够被完全可靠测量的计算机性能指标是时间 。 例如,对指令集减少
指令数目的改进可能降低时钟周期时间或提高 CPI, 从而抵消了改进的效果 。 类似地,
CPI 与执行的指令类型相 关 ,执行指 令数最少的代码其执行速度未必是最快的 。

程序的 CPU执行时间

指令数目

程序执行的执行时间,以秒为单位
程序执行的指令数目

之::;::行时钟周期 (CPr) I : 宁:::::::~:::::
图 1-15

基本的性能指标及其测扯单位

如何确定性能公式中这些因素的值呢?我们可以通过运行程序来测量 CPU 的执行时间,
并且计算机的说明书中通常介绍了时钟周期时间 。 难以测量的是指令数和 CPI 。 当然,如果确

定了时钟频率和 CPU 执行时间,我们只需要知道指令数或者 CPI 两者之一,就可以依据性能公
式计算出另一个 。
可以通过用体系结构仿真器等软件工具预执行程序来测 量 出指令数,也可以用大多数处理

器中的硬件计数器来测量执行的指令数、平均 CPI 和性能损失源等 。 由于指令数量取决千计算
机体系结构, 并不依赖于计算 机的具体实现,因而我 们可以 在不知道计算机全部实现细节的情

况下对指令数进行测量 。 但是, CPI 与计算机的各种设计细节密切相关,包括存储系统和处理
器结构(我们将在第 4 、 5 章中看到),以及应用程序中不同类型的指令所占的比例 。 因此,
卫和

CPI 对千不同应用程序是不同的,对于相同指令集的不同实现方式也是不同的 。
上述例子表明,只用 一 种因素(如指令数)去评价性能是危险的 。 当比较两台计算机时,

必须考虑全部 三 个因素,它们组合起来才能确定执行时间 。 如果某个因素相同(如上例中的时
钟频率),则必须考虑不同的因素才能确定性能的优劣 。 因为 CPI 随着指令组合 (instruction
mix) 而变化,所以必须比较指令的条数和 CPU, 即使时钟频率是相同的 。 在本章最后的练习

题中,有几道是关于计算机和编译程序改进后对时钟频率、 CPI 和指令数目影响的评价 。 在

1. 10 节,我们将讨论 一种因没有全面考虑各种因素而导致的对性能的误解。
二

指令组合:在一个或多个程序中,指令的动态使用频度的评价指标 。

配理解程序性能

程序的性能与算法、编程语言、编译程序、体系结构以及实际的硬件有

关 。 下表概括了这些成分是如何影响 CPU 性能 公式中的各种因素的 。
硬件或软件指标

算法

影响什么

指令数,可能
的 CPI

如何影响

算法决定源程序执行指令的数目,从而也决定了 CPU 执行指令的数
目 。 算法也可能通过使用较快或较慢的指令影响 CP I 。 例如,当算法使
用更多的除法运算时,将会导致 CPI 增大

编程语 言显 然会影响指令数,因为编程语 言 中的语句必须翻译为指
编程语 言

指令数, CPI

令,从而决定了指令数 。 编程语言也可影响 CPI, 例如, Java 语言充分
支持数据抽象,因 此将进 行间接调用,需要使用较高的 CPI 指令

编译程序

指令集体系结构

指令数, CPI
指令数,

钟频率

CPI 时

因为编译程序决定了源程序到计算机指令的翻译过程 , 所以编译程序
的效率既影响指令数又影响 CPI 。 编译器会以复杂的方式影响 CPI
指令集体系结构影响 CPU 性能的所有 3 个方面,因为它影响完成某功
能所需的指令数 、 每条指令的周期数以及处理器的时钟频率

计算机概要与技术

庄精解

27

也许你期望 CPI 最小值为 1.0 。 在第 4 章我们将看到,有些处理器在每个时钟周期

可对多条指令取指并执行 。 有些设计者用 IPC (i nstruction per clock cycle) 来代替 C PI 。如
一 个处理器 每时钟周期可执行平 均 2 条指令,则它的 IPC = 2 , CPI = 0. 5 。

砃精解

虽 然 时钟周期时间传统上是固定的,但是为了节省能量或暂时提升性能 ,当今的计

巨

算机可以使用不同的时钟频率,因此我们需要对程序使用 平均时钟 频率 。 例如, Intel Core
i7 处理器在处理器温度升高之前可以暂时将时钟频率提高 10% 。 Intel 称之为快速模式

(Turbo

mode) 。

配小测验
某 Java 程序在桌面处理器上运行需时 15 秒 。 一个新版本的 J ava 编译程序发行了,其编译
产生的指令数量是旧版本 Java 编译程序的 0.6 倍,不幸的是, CPI 增加为原来的 1. 1 倍 。 请问

该程序在新版本的 Java 编译程序中运行速度是多少?从以下三个选项中选出正确答案。

a 15 xO. 6/ 1. 1 =8. 2

秒

b. 15 x 0. 6 x I . I = 9. 9 秒
15

C.

X

1. 1/ 0. 6 =27. 5 秒

功耗墙

1. 7

图 1-16 表示 30 年间 Intel 八代微处理器的时钟频率和功耗的增长趋势 。 两者的增长几乎保

持了几十年,但近几年来突然缓和下来 。 其原因在于两者是密切相关的,而且功耗 已经到达了
极限,无法再将处理器冷却下来 。
10 000

3 300
2 000

(Z
H~

口

I 000

oooo

66 ~

16

3.3

4.1

4.9

(N
98W8
861)

()86
98£08

•

77

D

25

12.5

90
丈0
)00

.jji
苔l4-

JOO

87

(A )溢云

时钟频率 200

)

功耗

JO

N)

:>
d

PJ:>!JSl

:lfl!J)lfll!(:) 5F3KO

5F8
(LOOZ)

gx

品 P亡a;I

Old

n!JU

Z3』
0:)

1
)

nµu:>d

(
lOO

千OOZ)

(l661)

E

E

nµu:id

一
10:>S:>Jd

:l
d

(£66

寸

E
Ol)U

E

61)

寸

(600

3U3Ee
云=

1
)

图 1-16

20
oo
118642
3400

0:)

(
OlOZ)

(N

IOZ
)

25 年间 1ntel x86 八代微处理器的时钟频率和功耗 。 奔腾 4 处理器时钟频率和功耗提高很大 ,但
是性能提升不大 。 Prescott 发热问题导致奔腾 4 处理器的生产线被放弃 。 Core 2 生产线恢复使用
低时钟频率的简单流水线和片上多处理器 。 Core i5 采 用同样的流水线

虽然功耗提供了能够冷却的极限,然而在后 PC 时代,能 量是真 正关键的资源 。 对于个人

移动设备来说,电池寿命比性能更为关键 。 对于具有 100 000 个服务器的仓储式计算机来说,
冷却费用非常高,因此设计者要尽量降低其功耗 。 就像在评价性能时,使用执行时间比使用

MIPS ( 见 1. 10 节)之类的比率更加可信一样,在评价功耗时 , 使用能耗比功耗更加合理 , 能
耗的单位是焦耳/秒 。

占统治地位的集成电路技术是 CMOS (互补型金属氧化半导体),其主要的能耗来源是动

态能耗,即在晶体管开关过程中产生的能耗,即晶体管的状态从 0 翻转到 1 或从 1 翻转到 0 消

卫

笫 1 章

28

耗的能董 。 动态能耗取决千每个晶体管的负载电容和工作电压:
能耗 ex: 负载电容 x 电压 2
这个等式表示的是一个 0----+l~ 或 l~----+l 的逻辑转换过程中消耗的能量 。一 个晶体管消
耗的能量为:

能耗 ex: 1/2 X 负载电容 x 电压 2
每个晶体管需要的功耗是一个翻转需要的能耗和开关频率的乘积:
功耗 ex: 1/2 X 负载电容 x 电压 2 X 开关频率

开关频率是时钟频率的函数,负载电容是连接到输出上的晶体管数 量 (称为扇出)和 工
艺的函数,该函数决定了导线和晶体管的电容 。
思考 一 下图 1-16 的趋势,为什么时钟频率增长为 1 000 倍,而功耗只增长为 30 倍呢?因

为能耗和功耗是电压平方的函数,能够通过降低电压来大幅减少,每次工艺更新换代时都会这
样做 。一 般来说,每代的电压降低大约 15% 。 20 多年来,电压从 5V 降到了 IV 。 这就是功耗
只增长 30 倍的原因所在 。

配] 例题·相对功耗
假设我们需要开发一种新处理器,其负载电容只有旧处理器的 85% 。 再假设其电压可以
调节,与旧处理器相比电压降低了 15%, 进而导致频率也降低了 15%, 问这对新处理器的动

卫厂l

态功耗有何影响?

砃答案
p
上=(电容负载 xO. 85)
贮

x (电压 xO. 85)2 x

(开关频率 xO. 85)
(电容负载 x 电压 2 X 开关频率)

因此功耗比为

0. 854 =0. 52
新处理器的功耗大约为旧处理器的一半 。

D

目前的问题是如果电压继续下降会使晶体管泄漏电流过大,就像水龙头不能被完全关闭 一
样 。 目前 40% 的功耗是由千泄漏造成的,如果晶体管的泄漏电流再大,情况将会变得无法收拾 。

为了解决功耗问题,设计者连接大设备以增加冷却,而且将芯片中的一些在给定时钟周期内
暂时不用的部分关闭 。 尽管有很多更加昂贵的方式来冷却芯片,但继续提高芯片的功耗(比如到
300 瓦)对个人计算机甚至服务器来说成本太高了,对个人移动设备就更不用说了 。
由于计算机设计者遇到了功耗墙问题,因此他们需要开辟新的路径,选择不同于已经用了 30
多年的方法继续前进 。

配] 精解

虽然动态能耗是 CMOS 能耗的主要来源,但静态能耗也是存在的,因为即使在晶体管

关闭的情况下,还是有泄漏电流存在 。 在服务器中,典型的电流泄漏占 40% 的能耗 。 因此,
增加晶体管的数目,就会增加漏电功耗,即使这些晶体管总是关闭的 。 人们采用各种各样的
设计和工艺创新来控制电流泄漏,但还是难以进一步降低电压 。

配] 精解

功耗成为集成电路设计的一个挑战有两个原因 。 首先,电源必须由外部输入并且分布

到芯片的各个角落 。 现代微处理器通常使用几百个管角作为电源和地!同样,多层次芯片互

联仅仅为了解决芯片的电源和地的分布比例问题 。 其次,功耗作为热量形式散发,因此必须
进行散热处理 。 服务器芯片的功耗可高达 100 瓦以上,因此芯片及外围系统的散热是仓储规

卫汇]

模计算机的主要开销(见第 6 章) 。

计算机概要与技术

29

沧海巨变: 从单处理器向多处理器转变

1. 8

违今令止,很,往件很像秧咕者所写的音氐;使用名代的芯片,我们对才偏写二重
咕、四重咕 4 众小型合从的径验很少,住儿份大型女呤氐或者合咯升曲则儿一个车司的
挑战 。

— C13rian 打ayes, 《 Compu叩1 in a <Paraliel 枷呻:re), 2007
功耗的极限迫使微处理器的设计产生了巨变 。 图 1-17 给出了桌面微处理器的程序响应时
间的发展 。 从 2002 年起,其每年的增长速率从 1.5 下降到 1. 2 。
JOO 000

10000
(
OS

=
1-xv
LJ

>比4兰H )淫举

1000

100

JO

在 2006 年,所有桌面和服务器公司都在单片微处理器中加入了多个处理器,以求更大的
吞吐率,而不再继续追求降低单个程序运行在单个处理器上的响应时间 。 为了减少 processor 和

microprocessor (微处理器)这两个词语之间的混淆,一些公司将 processor 作为 "cores" 的代

称,这样 microprocessor 就是多核处理器了 。 因此,一个“四核“微处理器是一个包含了 4 个
processor 或者 4 个 core 的芯片 。

在过去,程序员可以依赖于硬件 、 体系结构和编译程序的创新,无需修改一行代码,程序
的性能每 18 个月翻一番 。 而今天,程序员要想显著改进响应时间,必须重写他们的程序以充
分利用多处理器的优势 。 而且,随着核的数目不断加倍,程序员也必须不断改进他们的代码,

以便在新微处理器上获得显著的性能提升。
为了强调软件和硬件系统的协同工作,我们在本书用“硬件/软件接口"的概念来进行描
述,并对这一接口概括一些重要的观点,下面是本书中的第一个。

而硬件/软件接口

并行性对计算性能一直十分重要,但它往往是隐蔽的 。 第 4 章将说明流水线,

30

笫 1 章

它是一种漂亮的技术,通过指令重叠执行使程序运行得更快 。 这是指令级并行性的一个例子 。
在抽取了硬件的并行本质之后,程序员或编译程序可认为在硬件中指令是串行执行的 。
迫使程序员意识到硬件的并行性,并显式地按并行方式重写其程序,曾经是计算机体
系结构的“第三抱怨",以致很多采用此种方式进行革新的公司都失败了(见 6. 15 节) 。

从历史发展的角度来观察,整个 IT 行业巳经把它放到了未来的发展方向上,程序员最终
卫工]

将成功地跃进到显式并行编程 。
为什么程序员编写显式并行程序如此困难呢?第一个原因是并行编程以提高性能为目的,

必然增加编程的难度 。 不仅程序必须要正确,能够解决重要问题,而且运行速度要快,还需要
为用户或其他程序提供接口以便使用,否则编写一个串行程序就足够了 。
第二个原因是为了发挥并行硬件的速度,程序员必须将应用划分为每个核上有大致相同数
量的任务,并同时完成。还要尽可能减小调度的开销,以不至于浪费并行性能 。
作一个比喻,现在有一个写新闻故事的任务,如果由 8 名记者共同来完成,能否提高 8 倍
的写作速度呢?为了实现这一目标,这个新闻故事需要进行划分,让每个记者都有事可做 。 假
如某名记者分到的任务比其他 7 名记者加起来的任务还要多,那用 8 名记者的好处就不存在

巨工]

了 。 因此,任务分配必须平衡才能得到理想的加速 。 另一个存在的危险是记者要花费时间互相
交流才能完成所分配的任务 。 如果故事的一部分,例如结论,在所有其他部分完成之前不能编
写,则缩短故事编写时间的计划将会失败 。 所以,必须尽量减少通信和同步的开销 。 对千上述

比喻和并行编程来说,挑战包括:调度、负载平衡、通信以及同步等开销 。 你也许会想到,当
更多的记者来写一个故事时挑战会更大,当核的数目更多时,并行编程的挑战将更大 。

为了反映业界的这个沧海巨变,后面的 4 章里每章都会至少有一节介绍有关并行性革命的
内容:

• 第 2 章, 2. 11 节。通常独立的并行任务需要一次次地协调,以便通报它们何时完成了
所分配的任务。本章将解释多核处理器任务同步所使用的指令。

• 第 3 章, 3.6 节 。 并行性的最简单方式是将计算设备单元并行工作,例如两个向量相
乘。摩尔定律提供了位宽更大且能同时处理多个操作数的算术单元,子字并行就是利
用这种资源的并行性的。

• 第 4 章, 4.10 节。尽管明确地知道并行编程的困难,但在 20 世纪 90 年代,人们依然
付出了巨大的努力和投资用于从流水线开始研究硬件和编译程序的并行性 。本章描述
了这些技术,包括取指与多指令同时执行和通过预测的方式推测决策结果、指令执

行等 。

• 第 5 章, 5. IO 节 。 降低通信开销的一个方法是让所有处理器使用同一个地址空间,任何处理
器可以读写任何数据 。 今天的计算机都采用 cache 技术,即在处理器附近更快的存储器中,
保持数据的一个临时复本 。 可以想象,如果多个处理器访问 cache 中的共享数据不一致的
话,并行编程将尤为困难 。 本章将介绍保持所有 cache 数据一致性的机制 。

• 第 5 章, 5.11 节 。 本节介绍如何使用许多磁盘共同构成一个能够提供更高吞吐率的系统,这
就是廉价冗余磁盘阵列 (RAID) 的灵感。 RAID 流行的真正原因是它能够通过采用适当数

卫江

量的冗余磁盘提供更高 的可靠性 。本节将介绍在不同 RAID 级别的性能 、成本和可靠性 。
除了这些章节之外,还有一整章介绍并行编程。第 6 章详细叙述了并行编程的挑战性,提
出了两种方法来解决共享编址通信和显式消息传输,介绍了一种易千编程的并行性模型,讨论
了使用基准测试程序对并行处理器进行评测的困难,为多核微处理器引入了一个新的简单性能
模型,最后描述和评价了 4 种使用该种模型的多核微处理器 。
如上所述,第 3 -6 章使用矩阵向 量相乘作为采用并行性提高性能的例子 。

计算机概要与技术

31

附录 C 介绍了一种在桌面计算机中越来越普及的图形处理器 (Graphics Processing Unit,
GPU) 。 它是为加速图像处理而发明的 。 得益于高度的并行性, GPU 表现出了优越的性能,并

已发展为完善的编程平台 。
附录 C 介绍了 NVIDIA GPU 及其并行编程环境 。

实例:

1. 9

Intel Core i7 基准

我焦,就像书一样,“什算机" ,l_ 一个令告界广泛龙用的概令 。 仅我仗唷想钊它
令仗展得心此迅速,囚彷我完令没唷预抖钊我们在一块芯片上可 4 得钊像我们最件得
钊的心此,的邦伴 。 晶休管的追步完令出乎我们的预抖 。 它比我们预危的仗展妻快 。

— J. Presper 甄frt.,

f£:J,吹C

的钊义者之一, 1991

本书的每一章都有“实例”一节,它将本书中的概念与我们日常使用的计算机联系起来,

这些小节涵盖了现代计算机中使用的技术 。 下面是本书中的第一个“实例“小节,我们将以

Intel Core i7 为例,说明如何制造 集 成电路,以及如何测量性能和功耗 。

1. 9. 1

SPEC

CPU 基准测试程序

用户日复一日使用的程序是用于评价新型计算机最完美的程序 。 所运行的一组程序集构成
了工作负载 (workload) 。 要评价两台计算机系统,只需简单地比较工作负载在两台计算机上

的执行时间 。 然而大多数用户并不这样做,他们通过其他方法测量计算 机的性能,希望这些方
法能够反映计算机执行用户工作负载的情况 。 最常用的测量方法是使用一组专门用千测量性能
的基准测试程序 (benchmark) 。 这些测试程序形成负载,用户期望预测实际负载的性能 。 我们
在前面提到,要加速大概率事件的执行,必须先准确地知道哪些是大概率事件,因此基准测试
程序在计算机系统结构中具有非常重要的作用 。

3

工作负载:运行在计算机上的一组程序,可以直接使用用户的一组实际应用程序,也可以
从实际程序中构建 。 一个典型的工作负栽必须指明程序和相应的频率 。

3

基准测试程序:用于比较计算机性能的程序 。

SPEC (system perlormance evaluation coo_perative) 是由许多计算机销售商共同出资赞助并支

持的合作组织,目的是为现代计算机系统建立基准测试程序集 。 1989 年, SPEC 建立了重点面

已瓦

向处理器性能的基准程序集(现在称为 SPEC89) 。 历经 5 代发展,目前最新的是 SPEC CPU

2006, 它包括 12 个整数基准程序集 (CINT 2006) 和 17 个浮点基准程序集 (CFP 2006) 。 CINT

2006 包括 C 编译程序、量子计算机仿真、下象棋程序等, CFP 2006 包括有限元模型结构化网
格法、分子动力学质点法 、 流体动力学稀疏线性代数法等 。

图 1-18 列举了 SPEC 整数基准程序及其在 Intel Core i7 上的执行时间、指令数、 CPI 和时钟
周期时间等组成的 SPEC 分值 。 注意, CPI 的最大值和最小值相差达到 5 倍 。
为了简化测试结果, SPEC 决定使用单一的数字来归纳所有 12 种整数基准程序 。 具体方法

是将被测计算机的执行时间标准化,即将被测计算机的执行时间除以一个参考处理器的执行时
间,结果称为 SPECratio 。 SPECratio 值越大,表示性能越快(因为 SPECratio 是执行时间的倒
数) 。 CINT2006 或 CFP2006 的综合测试结果是取 SPEC ratio 的几何平均值 。

配精解

在使用 SPECratio 比较两台计算机时采用的是几何平均值,这样可以使得无论采用

哪台计算机进行标准化都可得到同样的相对值 。 如果采用的是算术平均值,结果会随选用

的参考计算机而变 。

巨了

笫 1 章

32

描述

名汴

I

I

7:~.~

I

CPI

I

a才?霄尸 I 执:霍司 1 参尸;才1司 I S11ec分值 1

字符串处理解释程序

perl

2 252

0.60

0.376

508

9 770

块排序压缩

bzip2

2 390

0.70

0.376

629

9 650

15.4

GNUC编译器

gee

794

1.20

0.376

358

8 050

22.5
41.2

19.2

组合优化

mcf

221

2.66

0.376

221

9120

go游戏 ( 人工智能 )

go

1274

1.10

0.376

527

10 490

19.9

围棋游戏 ( 人工智能 )

hmmer

2 616

0.60

0.376

590

9 330

15.8

基因序列搜索

SJeng

I 948

0.80

0.376

586

12 100

20.7

量子计算机仿真

libquantum

659

0.44

0.376

109

20720

190.0

0.50
2.10

0.376

713

22 130

0.376

290

6 250

31.0
21.5

视频压缩

h264avc

3 793

离散事件仿真库

omnetpp

367

游戏/寻找路径

astar

1250

1.00

0.376

470

7 020

14.9

XML解析

xalancbmk

I 045

0.70

0.376

275

6900

25.1

几何平均

图 1-18

25.7
SPECINTC2006 基准程序在 2. 66GHz 的 Intel Core i7 920 上的运行结果 。 按照经典的 CPU 性能公式

一节(原书第 36 页)的等式,执行时间是本表的 三 个因素的乘积:以亿为单位的指 令数 、 每条
指令的时钟数 (CPI) 以及纳秒级的时钟周期时间 。 SPECratio 仅仅是参考时间,由 SPEC 提供,
被所测量的执行时间相除 。 SPECINTC2006 所引用的单个数目是 SPECratio 的几何平均数

几何平均值的公式是

n 执行 时 间比,
其中,执行时间比 , 是总共 n 个工作负载中第 L 个程序的执行时间按参照计算机进行标准化的
结果,并且
n

Ila, 表示 al

X

a2

X

…

X

a.

i=l

1. 9. 2

SPEC 功耗基准测试程序

由于能耗和功耗日益重要, SPEC 增加了 一 组用于评估功耗的基准测试程序,它可以报告
一段时间内服务器在不同负载水平下(以 10% 的比例递增)的功耗 。 图 1-19 给出了在基于
Intel Nehalem 处理器的服务器上的测试结果,与前面类似 。
目标负载仿

100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
合计

瞿腿删匮牖
865 618
786 688
698 051
607 826
521 391
436 757
345 919
262 071
176061
86 784
。

4 787 166

Lss· o s!L ower=
图 1-19

258
242
224
204
185
170
157
146
135
121
80
I 922

2490

SPECpower_ssj2008 在服务器上的运行结果 。 服务器的具体配置为双插槽 2. 6GHz Intel Xeon

X5650 处理器, 16GB DRAM, 100GB 固态硬盘

计算机概要与技术

33

SPEC power 最早来自于面向 Java 商业应用的 SPEC 基准程序 (SPECJBB2005) , 它主要测试
处理器、 cache 、 主存以及 Java 虚拟机、编译器 、 无用单元收集器、操作系统片段 。 性能采用

吞吐率来测 量 ,单位是每秒完成的操作次数 。 还是为了简化结果 , SPEC 采用单个的数字来进

卫团]

行归纳,称为 "overall ssj —
ops per watt" , 其计算公式 是 :

overall ssj_ops per watt =

(&a ssj_ops;) / (&a power; )

式中, ssj_ops, 为工作负载在每 10% 增 量 处的性能 , power, 是对应的功耗 。

1. 10

谬误与陷阱
科学一定升心于神祜和对神话的批判 。

—Sir 归 Popper, 《 吓e Pli如sopliy of Seier吩, 1957
本书中每一章都会有"谬误与陷阱"一节,其目的是说明我们在实际中经常遇到的误解,

我们称之为谬误 。 当讨论谬误时,我们会举出一个反例 。 我们也讨论陷阱,即那些容易犯的错
误 。 通常陷阱是指一般原理只在有限的上下文中才是真的 。 本节旨在帮助你在设计或使用计算

机时避免犯同样的错误 。 价格/性能谬误和陷阱使许多计算机架构师掉入圈套,包括我们下面
开始介绍的本书的第一个陷阱,虽然它曾迷惑了许多设计者,却揭示了计算机设计中的一个重
要关系 。
陷阱:在改进计算机的某个方面时期望总性能的提高与改进大小成正比 。

加速大概率事件的伟大思想导致的令人泄 气 的结果困扰着软件和硬件设计人员 。 它提醒我
们一个事件需要的时间影响着改进的机会 。

用一个简单的例子就可以很好地说明 。 假设一 个程序在一台计算机上运行需要 100 秒,其
中 80 秒的时间用于乘法操作 。 如果要把该程序的运行速度提高到 5 倍,乘法操作的速度应该
改进多少?
改进以后的程序执行时间可用下面的 Amdahl 定律计算:

改进后的执行时间=受改进 影 响的执行时间 / 改进量+不受影响的执行时间
代入本例的数据进行计算:
改进后的执行时间= 80/ n

+ (100 - 80)

由于要求快至 5 倍,新的执行时间应该是 20:

20 =80/n +20
0 =80/ n

:>

Amdahl 定律:阐述了“对于特定改进的性能提升可能由所使用的改进特征的数量所限制”
的规则 。 它是“收益递减定律”的量化版本 。

可见,如果乘法运算占总负载的 80%, 则无论怎样改进乘法,也无法达到性能提高至 5 倍
的结果 。 特定改进的性能提升由所使用的改进特征的数量 所限制 。 这个概念也产生了日常生活

中我们称为“收益递减"的定律 。
当我们知道一些函数所消耗的时间及其潜在的加速时,我们就可以使用 Amdahl 定律预测
性能的提升 。 将 Amdahl 定律与 CPU 性能公式结合,是 一 种很方便的性能评价工具 。 读者可以
在本章练习中进一步体会 。

Amdahl 定律还应用于并行处理器数量 的实际限制中,我们将在第 6 章中的"谬误与陷阱"
中介绍 。
谬误:利用率低的计算机功耗低 。

卫

笫 1 章

34

服务器的工作负载是变化的,所以在低利用率的情况下功率很重要 。 例如, Google 仓储式
计算机中 CPU 利用率大多数时间在 10% -50% 之间,只有不到 1 % 的时间达到 100% 。 即使花
费 5 年时间来研究如何很好地运行 SPECpower 基 准测试程试 , 在 2012 年,根据最好的结果配

置的计算机中,只有 10% 的 工 作负载能够消耗 1/3 的峰值功耗 。 在实际工作中的系统由千没有
针对 SPECpower 进行配 置 ,因此其结果将会更加糟糕 。
由千服务器的工作负载 差 异大且消耗了峰值功耗的很大比例 , Luiz Barroso 和 Urs Holzle 提

出 需要对硬件重新进行设计,已达到”按能 量 比例计算" 。 这就是说,在未来的服务器中,
10% 的 工作负载使用 10% 的峰值功耗,这将减少数据中心的电费和 二氧 化碳的排放 。
谬误:面向性能的设计和面向能量效率的设计具有不相关的目标 。
由千能耗是功耗和时间的乘积,在通常情况下,对千软硬件的优化而言 ,即使在优化的部

分起作用时能耗可能高了 一 些,但是这些优化缩 短 了系统运行时间 , 因此整体上还 是 节约了能
量 。 一 个重要的原因是当 一 个程序运行时,计算机的其他部分仍在消耗能 量 ,因此,即使优化
的部分多消耗了能 量 ,运 行 时间的减少也可以减少整个系统的能耗 。
陷阱:用性能公式的一个子集去度量性能 。

卫们

我们早就指出了 一种谬误:简单地只用时钟频率 、 指令数和 CPI 之一去预测性能 。 另 一种常
犯的错误是只用 三种因素之二去比较性能 。 虽然这样做在有些条件下可能正确,但这种方法容易
误用 。 实际上,几乎所有取代用时间去度量性能的方法都会导致歪曲的结果或错误的解释 。
有一种用 MIPS

(million instructions per second, 每 秒百万条指令)取代时间以度 量 性能的

方法 。 对千 一 个给定的程序, MIPS 表示为:

MIPS= 指令数/ (执行时间 X 10勹

MIPS 是指令 执行的速率,它规定了性能与执行时间成反比,越快的计算机具有越高的
MIPS 值 。 从表面看, MIPS 既容易理解 , 又符合人的直觉 。

:>

MIPS: 基于百万条指令的程序执行速度的一种测量 。 指令条数除以执行时间与 106 之积就
得到了 MIPS 。

其实,用 MIPS 作为度量性能的指标存在三个问题 。 首先, MIPS 规定了指令执行的速率,
但没有考虑指令的能力 。 我们没有办法用 MIPS 比较不同指令集的计算机,因为指令数肯定 是

不同的 。 其次,在同 一 计算机上,不同的程序会有不同的 MIPS, 因而一台计算机不会只有 一
个 MIPS 值 。 例如,将执行时间用 MIPS 、 CPI 、 时钟频率代入之后可得:

MIPS= 指令 数/ ( 指令数 X CPI/ 时钟 频 率 X 10勹
回顾一 下,图 1-18 显示了 SPEC2006 在 Intel

=时钟 频 率 I (CPI x 10勹

Core i7 上的 CPI 最大值和最小值是相差 5 倍

的, MIPS 也是如此 。 最后 一 点 , 也是最重要的 一 点,如果一个新程 序 执行的指令数更多,但
每条指令的执行速度更快,则 MIPS 的 变 化是与性能无关的 。

配} 小测验

-

某程序在两台计算机上的性能测 量 结果为:

-一
指 令数

时钟频率

CPI

区口

a. 哪台计算机的 MIPS 值更高?
b. 哪台计算机更快 ?

_

100 亿次

80 亿次

4GHz

4GHz

1.0

1. I

计算机概要与技术

1. 11

35

本章小结
那里· · · ···ENIAC 配各有 18 000 个 i 空管,重量达 30 吨,土未的什箕机具唷 1000

个 i 空管 ,可伲 仅仅有 1.5 吨重 。

-

( Popufar'M.edianics>, 1949. 3

虽然很难准确预测未来计算机的成本与性能将发展到怎样的水平,但可以确定的是一定会
比现在的计算机更好 。 计算机性能水平的提高是永无止境的,计算机设计者和程序员必须理解
更广泛的问题 。

硬件和软件设计者都采用分层 的方法构建计算机系统,每个下 层 都对其上层隐藏本层的细

节 。 抽象原理是理解当今计算机系统的基础,但这并不意味着设计者只要懂得抽象原理就足够
了 。 也许最重要的抽象层次是硬件和底层软件之间的接口,称为指令集体系结构 。 将指令集体

系结构作为一个常 量 可以使其不同的实现方法(价格和性能可能不同)能够运行同一软件 。
这种方法产生的一个副效应是,要预先排除可能需要接口发生变化的那些革新结构 。

有一个可靠的测定性能的方法,即用实际程序的执行时间作为尺度 。 该执行时间与我们能
够通过下面公式测量到的其他重要指标相关:

整=指令数 x 时钟周期数 x
程序

程序

指令数

秒数
时钟周期数

本书中我们将多次使用这一公式及其组成因子 。 必须明确的是,任何一个独立的因子都不
能确定性能,只有 三个 因子的乘积(即执行时间)才是可靠的性能度量标准 。

庄重点

执行时间是唯一有效且不可推翻的性能度量方法 。人 们曾经提出许多其他度量方

法,但均以失败告终 。 有些从一开始就没有反映执行时间,因而是无效的;还有一些只能

在有限条件下有效,超出了限制条件则失效,或是没有清晰地说明有效性的限制条件。
现代处理器的关键硬件技术是硅 。 与理解集成电路技术同样重要的是理解我们所期望的摩
尔定律中描述的技术进步速率 。 在硅技术加快硬件进步的同时,计算机组织的新思想也改进了

产品的性价比 。 其中有两个重要的新思想:第一,在程序中开发并行性,目前的典型方法是借
助多处理器;第二,开发存储器层次结构的访问局部性,目前的典型方法是通过 cache 。

能 量效率已经取代芯片面积,成为微处理器设计中最重要的资源 。 保存功耗并且改进性能
的需求已经迫使硬件工业向多核微处理器跃进,从而迫使软件工业向并行硬件编程跃进 。 并行
化现在是提高性能的必要途径 。

计算机设计总是以价格和性能来度量的,也包括其他一些重要的因素,如能耗、可靠性、

成本和可扩展性等 。 尽管本章的重点在于价格、性能和能耗,但是最佳的设计应该在特定的应
用领域中取得所有因素之间适 当 的平衡 。

本书导读
在抽象的底部是计算机的 5 个经典部件:数据通路、控制器、存储器、输人和输出(见
图 1-5) 。 这 5 个部件也是本书后面几章的框架:

• 数据通路:第 3 、 4 、 6 章 和附录 C
• 控制器:第 4 、 6 章和附录 C
• 存储器:第 5 章
• 输入:第 5 章和第 6 章
• 输出:第 5 章和第 6 章

巨臣]

笫 l 章

36

如上所述,第 4 章介绍处理器如何开发隐式并行性,第 6 章 介绍并行革命的核心一显式
并行多核微处理器,附录 C 介绍高度并行的图像处理器芯片 。 第 5 章介绍如何开发层次存储结

构的访间局部性 。 第 2 章介绍指令集(编译器和计算机之间的接口),并强调了编译器和编程
语言在利用指令集特性方面的作用 。 附录 A 提供了第 2 章指令集的参考数据 。 第 3 章介绍计算
区江

机如何处理算术运算数据 。 附录 B 介绍逻辑设计 。

鹄 1. 12

历史观点和拓展阅读
沽跃的科学极域枕像一个臣丈的螅奴窝;人们清夫在主相对立的观立中 ,

4 光速

传追着信息,将信息从一个地方传钊另一个地方 。

— Lewis'l1iomas,

( Lives of a 通〉 中的 " II 然科学 ", 1974

本书的每一章都有“历史观点和拓展阅读”一节,可在本书配套网站上找到 。 我们可以
通过一 系列的计算机来追踪某 一 思想的发展历程,或者叙述 一 些历史上重要的项目贡献,还提

供参考资料以便进一步探究 。
本章的“历史观点”提供了几个关键思想的历史背景,其目的是向你介绍对技术进步做
出贡献的重要历史人物以及他们的事迹 。 通过理解过去,你可以更好地理解那些推动未来计算
技术进步的力量 。 配套网站中每个历史观点之后都会提示进一步阅读,这部分具体内容见配套
网站中的”进 一步 阅读”部分 。 在配套网站可下载 l. 12 节的剩余部分 。

1. 13

练习题

完成练习所需的相对时间比率标示在题号之后的方括号中 。 平均来说,做标记[ 10 ] 的练习用的时
间是做标记 [5] 的练习的 2 倍 。 做题前应先阅读的章节则标示在尖括号中 。 例如,<

1.4 >表示你应该

在读过 1.4 节后才能完成本题 。

1. 1 [2] <1.1> 列举和描述除智能手机之外的 4 种类型的计算机 。
1. 2 [ 5 ] < I. 2 >计算机系统结构中的 8 个伟大思想与其他领域的思想相同 。 将计算机系统结构中的 8 个
伟大思想“面向摩尔定律的设计”、“使用抽象简化设计”、“加速大概率事件”、“采用并行提高性

能”、“采用流水线提高性能”、“采用预测提高性能”、“存储器层次“ 、 “通过冗余提高可靠性”与
其他领域的下列思想进行匹配:

a 汽车制造中的组装生产线

b. 吊桥缆索
c. 采用风向信息的飞机和船舶导航系统

5五]

d. 高楼中的高速电梯
e. 图书馆的预定台
f. 通过增大 CMOS 晶体管的栅极面积来减小翻转时间

g. 增 加电磁飞机 弹射器(不同于流体驱动模型,它采用电驱动),允许有新型反应堆技术才生成更
多的能量

h. 制造自动驾驶汽车,其控制系统是安装在汽车上的传感器系统,例如车道偏离检测系统和智能导
航控制系统

1.3 [2] <1.3> 讲述高级语言(例如 C ) 编写的程序转化为能够直接在计算机处理器上执行的表示的
步骤 。

1. 4 [ 2 ] < I. 4 > 一 个彩色显示器中的每个像素由三种基色(红,绿,蓝)构成,每种基色用 8 位表示,
分辨率为 1 280 X] 024 像素 。
a 为了保存一帧图像最少需要多大 的缓存(以字节计算) ?

b. 在 100Mbit/s 的网络上传输 一 帧图像最少需要多长时间 ?

计算机概要与技术

1.5

37

[ 4 ] <1. 6> 有 3 种不同的处理器 P l 、 P2 和 P3 执行同样的指令集, Pl 的时钟频率为 3 GHz, CPI
5 ; P2 的时钟频率为 2. 5GHz, CPI 为 1.0 ; P3 的时钟频率为 4GHz , CPI 为 2. 2 。

为 I.

a 以每秒钟执行的指令数目为标准,哪个处理器性能最高?

b. 如果每个处理器执行一个程序都花费 10 秒钟时间,求它们的时钟周期数和指令数 。
C.

我们试图把执行时间减少 30 % , 但这会引起 CPI 增加 20% 。 问 : 时钟频率应该是多少才能达
到时间减少 30% 的目的?

1.6

[ 20 ] <1 .6> 同一个指令集体系结构有两种不同的实现方式 。 根据 CPI 的不同将指令分成 4 类
5GHz, CPI 分别为 1 、 2 、 3 和 3; P2 时钟频率为 3GHz,

( A 、 B 、 C 和 O ) , Pl 的时钟频率为 2.

CPI 分别为 2 、 2 、 2 和 2 。

给定一个程序,有 J.Q

0,

X

106 条动态指令,按如下比例分为 4 类: A, 10% ; B, 20%; C, 50% ;

20% 。

a 每种实现方式总的 CPI 是多少?

1. 7

b. 计算两种情况下的时钟周期 。
[ 15 ] < I. 6 >编译程序对 一个应 用在给定的处理器上的性能有极深的影响 。 假定一个程序 , 如果
采用编译程序 A, 则动态指 令 数为 1. Q X 109, 执行时间为 I. l s; 如果采用编译程序 B , 则动态

区汇]

指 令数为 J. 2 X J09, 执行时 间为 I. 5s 。
a 在给定处理器时钟周期为 Ins 时,找出每个程序的平均 CPI 。

b. 假定编译程序是在两个不同的处理器上运行的 。 如果这两个处理器 的执行时 间 相 同 ,求运行
编译程序 A 的处理器时钟相对于运行编译程序 B 的处理器的时钟快多少?

c 假设开发了一种新的编译程序,只用 6. 0 x l08 条指令,平均 CPI 为 1. 1 。 求这 种 新 的 编译程
序相对于原先编译程序 A 和 B 的 加 速比 。

1. 8

2004 年发布的 Pentium 4 Prescott 处理器时钟频率为 3. 6GHz, 工作 电 压为 I. 25 V 。 假定平均情况
下静态功耗为 !OW, 动态功耗为 90 W 。

2012 年发布的 Core i5 Ivy Bridge 时钟频率为 3 . 4GHz , 工作电压为 0. 9 V 。 假定平均情况下静态功
耗为 30W , 动 态 功耗为 40W 。

1. 8. 1

[ 5 ] < I . 7 > 分别求出每个处理器的平均电容负载 。

1.8.2

[ 5 ] <1.7> 对于每种工艺,求出静态功耗占总功耗的比例和静态功耗相对于动态功耗的比率 。
[ 15 ] < I. 7 > 如果要将整体功耗降低 10 %, 求出在保持漏电流不变的情况下电压要降低多少?

1. 8. 3

注意:功耗定义为电压与电流的乘积 。

1.9

在一个处理器中,假定算术指令 、 l oad/store 指 令 和 分支 指 令 的 CPI 分 别 是 1 、 12 和 5 。 另 外假
定一个程序在单个处理器核上运行 时 需要 执 行 2. 56 X 109 条算术 指 令、 J. 28 X 109 条 load/ store
指令和 2. 56 E8 条分支指令,并假定处理器的 时钟频率为 2G Hz 。

现假定程序并行运行在多核上,分配到每个处理器核上运行的算术 指令和 load/store 指 令数目为
单核情况下相应指令数目除以 0. 7 xp ( p 是处理器的数量),而每个处 理器 的分支指令的数蜇保
持不变 。

1. 9. 1

[ 5 ] < I. 7 > 求出当该程序分别运行在 1 、 2 、 4 和 8 个处理器核上的执行时间,并求出其他情况
下相对于单核处理器的加速比 。

1. 9. 2

[ 10 ] < I. 6 , I. 8 > 如果算术指令的 CPI 加倍,对分 别 运行在 1 、 2 、 4 和 8 个处理 器 核上的 执 行
时 间 有何影响?

1. 9. 3

[ 10 ] < I. 6 , I. 8 >如 果要使单核 处 理器 的 性 能 与 四 核处 理器 相 当, 单处理器中 load/ store 指 令 的
CPI 应该降低多少?假定 四 核处理 器的 CPI 保 持不变 。

1. 10

假定一个直径 15 cm 的晶圆的成本是 1 2, 包含 84 块芯片,其缺陷参数为 0. 020 瑕疵/cm2 。 而一
个直径 20 cm 的晶圆的成本是 15 , 包含 100 块芯片,其缺陷参数为 0. 031 瑕疵/ cm2

1. 10. 1

[ 10 ) < I. 5 > 分别求出每种芯片的成品率 。

1. 10. 2
1. 10. 3

[ 5 ] < I. 5 >分别求出每种芯片的价格 。
[ 5 ] < I. 5 > 如每晶圆的芯片数增加 10%, 每单位面积的瑕疵数增加 15 %, 求芯片面积和成
品率 。

巨匼]

38

1. 10. 4

笫 1 章

[ 5] < 1. 5 >假设随着电子器件制造技术的进步,成品 率从 0.92 上升到 0. 95 。 给定芯片面积为
200mm2, 求每一 种技术下单位面积的瑕疵数 。

1. 11

SPEC CPU 2006 的 bzip2 基准程序在 AMO Barcelona 处理器上执行的总指令数为 2. 38

X

1012 , 执

行时间为 750s, 参考时 间为 9 650s 。

1. 11. 1

[ 5 ] < 1. 6 , 1. 9 >如果时钟周期时间为 0. 333ns, 求 CPI 值 。

1. 11. 2

[ 5] < 1. 9 >求 SPEC 的分值 。

1. 11. 3

[ 5] < 1. 6, 1. 9 >如果基准程序的指令数增加 10% , CPI 不变,求 CPU 时间增加多少?

1. 11. 4

[ 5 ] < 1. 6 , 1. 9 >如 果基准程序的指令数增加 10%, CPI 增加 5%, 求 CPU 时间增加多少?

1. 11. 5

[ 5 ] < 1. 6 , l. 9 >根据上题中指令数和 CPI 的变化,求 SPEC 分值的变化 。

1. 11. 6

[ 10] < 1. 6 >假设开发了 一款新的 AMO Barcelona 处理器, 其工作频率为 4GHz, 在其指令集中
增加了 一 些新的指令,从而使程序中指令数目减少了 15%, 程序的执行时间减少到了 700s,

新的 CPI 分值为 13. 7' 求新的 CPI 。

1. 11. 7

[ 10 ] < l. 6 >当时钟频率由 3GHz 上升到 4GHz 时,上 一 小题算出的 CPI 比 1. 1 l. 1 的 高 。 请确
定 CPI 的升高是否与频率升高相同?如果不同,为什么?

区工]

1. 11. 8
1. 11. 9

[ 5 ] < 1. 6 > CPU 时间减少了多少?
[ 10 ] < 1. 6 >对第 二个基准程序 libquanlum , 假定执行时间为 960ns, CPI 为 l. 61 , 时钟频率为
3GHz 。 在时钟频率为 4GHz 时,在不影响 CPI 的前提下执行时间降低 10%, 求指令数 。

1. 11. 10

[ 10 ] < 1. 6 >在指令数和 CPI 保持不变的前提下 , 如果要将 CPU 时间进 一 步减少 10%, 求时钟
频率 。

1. 11. 11

[ 10] < 1. 6 >在指令数保持不变的前提下,如果要将 CPI 降低 15%, CPU 时间减少 20%, 求时
钟频率 。

1.12

1. 10 节引证了 一 个用性能公式的 一 个子集去计算性能的陷阱 。 为了说明它,考虑下面两种处
理器 。 Pl 的时钟频率为 4GHz, 平均 CPI 为 0. 9 , 需要执行 5 . 0

3GHz, 平均 CPI 为 0. 75 , 需要执行 1. 0
1. 12. 1

X

X

109 条指令 ; P2 的时钟频率为

109 条指令 。

[ 5 ] < 1. 6 , 1. 10 > 一个常见的错误是,认为时钟频率最高的计算机具有最高的性能 。 这种说法
正确吗?请用 Pl 和 P2 来验证这一说法 。

1. 12. 2

[ 10 ] <l. 6, 1. 10 >另 一个错误是,认为执行指令最多的处理器需要更多的 CPU 时间 。 考虑 Pl
执行) . 0

X

109 条指令序列所需的时间, Pl 和 P2 的 CPI 不变,计算 一 下 P2 用同样的时间可以

执行多少条指令?

1. 12. 3

[ 10] < 1. 6 , 1. IO > 一 个常见的错误是用 MIPS (每秒百万条指令)来比较两台不同的处理器的
性能,并认为 MIPS 最大的处理器具有最高的性能 。 这种说法正确吗?请用 Pl 和 P2 验证这 一

说法 。

1. 12. 4

[ 10 ] < 1. 10 >另 一 个常见的性能标志是 MFLOPS (每秒百万条浮点指令),其定义为
MFLOPS = 浮点操作的数目/(执行时间 x (I xlO勹) 。
它与 MIPS 有同样的问题 。 假定 Pl 和 P2 上执行的指令有 40% 的浮点指令,求出程序的
MFLOPS 。

1.13

l. 10 节引证另 一个易犯的错误是通过只改进计算机的一个方面来改进计算机的总体性能 。 假
如 一 台计算机上运行 一个程序需要 250s, 其中 70s 用于执行浮点指令, 85 s 用千执行 US 指令,

40s 用于执行分支指令 。
区:[J

1. 13. 1

[ 5 ] < 1. 10 >如果浮点操作的时间减少 20%, 总时间将减少多少?

1. 13. 2

[ 5 ] < l. 10 >如果总时间减少 20%, 整数操作时间将减少多少?

1. 13. 3

[ 5 ] < 1. 10 >如果只减少分支指 令时间,总时间能否减少 20 %?

1.14

假定 一个程序需要执行 50
X

X

106 条浮点指令、 ll0xl06 条整数指 令、 80

X

106 条 US 指令和 16

106 条分支指令 。 每种类型指令的 CPI 分别是 1 、 1 、 4 和 2 。 假定处理器的时钟频率为 2GHz 。

< 1. 10 >如果我们要将程序运行速度提高至 2 倍, 浮点指令的 CPI 需如何改进?

1.14.1

tioJ

1. 14. 2

[ 10 ] < l. 10 >如果我们要将程序运行速度提 高至 2 倍, US 指令的 CPI 需如何改进?

计算机概要与技术

1. 14. 3

39

[ 5 ] < I. 10 >如果整数和浮点指令的 CPI 减少 40%, us 和分支指令的 CPI 减少 30%, 程序的执
行时间能改进多少?

1. 15

[ 5 ] < 1. 8 >多处理器系统中的执行时间可分成例程计算时间加处理器之间的通信时间。
假定 一 个程序在单处理器上执行时需要 t = 100s 。 当它在 p 个处理器上运行时,每个处理器需要
tips 的计算时间,两外还需要 4s 的开销,且开销与处理器数量无关 。 在处理器数目分别为 2 、
4 、 8 、 16 、 32 、 64 和 128 时,计算每个处理器的执行时间 。 在每种情况下,列出相对于单处理

器的加速比和实际加速比与理想加速比的比值(理想加速比是指没有开销情况下的加速比) 。

庄 小测验答案
1.1
1.3

问题讨论:可以有多种答案 。

DRAM 存储器:易失性,访问时间短(大约 50 - 70ns), 每 GB 的价格 ($5 - $10) 。 磁盘存储
器:非易失性,访问时间比 DRAM 慢 100 000 - 400 000 倍,每 GB 的价格比 DRAM 便宜 100 倍 。
Tiash 存储器:非易失性 , 访问时间比 DRAM 慢 100 -1 000 倍,每 GB 的价格比 DRAM 便宜 710 倍 。

1. 5

1 、 3 、 4 是正确答案,答案 5 一 般可认为正确,因为产量高时能促使额外投资去减小芯片面积,
例如减小 10%, 这是一种经济决策,但并不总是正确 。

1. 6

1. 两者都改进, 2. 延迟, 3. 都不改进; 7 s 。

1. 6

b

1.10

a 计算机 A 有较高的 MIPS 值; b. 计算机 B 更快 。

区

第2 章 1
Computer Organization and Design : The H血 ware/ Software Interface

指令:计算机的语言

接口

评价性能

计算机的 5 个经典部件

我对上肴优,,,汛身倍,对女人优惫大利语,对男人优仗信,对我的马说德倍 。
—仗出出玉壹璞人告 (15哥1558)

2. 1

引言
要计算机服从指挥,就必须用计算机的语言 。 计算机语言中的基本单词称为指令,一台计

算机的全部指令称为该计算机的指令集 (instruction set) 。 本章将介绍实际计算机指令集的两
种形式: 一 种是人们编程书写的形式,另一种是计算机所能识别的形式 。 我们将以自顶向下的
方式来介绍,从看似受约束的汇编语言助记符开始,逐步精炼到实际计算机的真实语言 。 第 3
章将继续采用这种向下探究的方式,揭示算术运算的硬件以及浮点数的表示方法 。
二

指令集:一个给定的计算机体系结构所包含的指令集合 。

尽管机器语言种类繁多,但它们之间十分类似,其差异性更像人类语言中的”方言”,而
非各自独立的语言 。 因此,理解了 一 种机器语言,其他种类的机器语言也就容易理解了 。
本书选择 MIPS 技术的指令集,它是自 20 世纪 80 年代以来出现的优秀指令集 。 通过简要
介绍其他 三 种流行的指令集可以看出 MIPS 指令的优势 。

指令:计算机的语言

41

1 ) ARMv7 与 MIPS 类似 。 2011 年, ARM 处理器芯片的产 量 超过 90 亿片,这使得 ARMv7
成为最流行的指令集 。

2) 第 二个例子是 Intel x86, 在 PC 领域和后 PC 时代的 云计算领域占统治 地位 。

3) 第 三 个例子是 ARMv8, 它将 ARMv7 的地址范围由 32 位扩展到 64 位 。 而具有讽刺意味
的是,这个 2013 年 产生 的指 令集 更加接近于 MIPS, 而非 ARMv7 。

这种相似性 一 方面是因为所有计算机都是基于基本原理相似的硬件技术所构建的,另一方
面是因为所有计算 机都必须提供 一 些基本操作 。 此外,计算机设计者有一个共同的目标:找到
一 种语 言,可方便硬件和编译器 的设计 ,且使性能最佳, 同时使成本和功耗最低 。 但实现这个
目标 需要长 期的探索 。 下述引文写于计算机 出现不久的 1947 年,但今天它仍然适用:
用形式过行的方仗可 A 很容易看钊,在坟论上存在着某种”指令集“足 4 控制

F

仕饵的提忭序列并仗之执行.…. . 从名肴的观五出仗,在遠拌一个”指令集"忖,哀

正的决定性因素儿妻史,地考总其实栋性质:”指令集"妻求的设备简单性,它的点
用对才斛决实枉重妻问组的咧硝性 4 众它斛决镶具问组的处坟遠太 。
— <Burf.§、

g。知:ne、 von :Neumann, 1941

无论是对 20 世纪 50 年代的计算机而言,还是对 现代的计算机来说,

“设备简单 性”都是

值得考虑的重要问题 。 本章的目的就是讲解符合 此原则的一种指令集,介绍它怎样用硬件表
示,以及它和高级编程语言之 间的 关系 。 我们的示例使用 C 语言编写 , 2. 15 节介绍了在使用
像 Java 这样的面向对象语言时会有什么不同 。
通过理解如何表述指令,读者也将发现计算的秘密:存储程序概念 (stored- program concept ) 。 此外 ,通过使用机器语言编程,并在本书提供的模拟器中运行,读者将 进一步体会到

编程语言和编译优化对程序性能的影响 。 本章结束时我们将简要介绍指令集的发展历史和其他
的计算机”方言” 。

存储程序概念:多种类型的指令和数据均以数宇形式存储于存储器中的概念,存储程序型

3

计算机即源于此 。

我们结合计算机的结构,逐步讲解 MIPS 指令集 。 采用自顶向下、循序渐进的方法并结合各
部件及其说明,尽 量使 机器语言变得不再枯燥 。 图 2-1 给出了本章将要介绍的指令集的总体情况 。
MIPS 操作数

示例

I

32 个寄存器

Memory [ 0 ] , Memory [ 4 ] , · · · ,
Memory [ 4294967292 ]

算术

图 2 -1

加法

I

寄存器用于数据的快速存取 。 在 MIPS 中 , 只

$s0 - $s7 , $ t0 - $ t9, $ zero,
$a0 - $a3, $v0 - $vl, $gp , $fp,
$sp,$ra,$at

_
_
230 个存储器字

注释
能对存放在寄存器中的数据执行算术操作,寄存
器 $zero 的值恒为 0, 寄存器 $at 被汇编器保

留,用千处理大 的常数
存储器只能通过数据传输指令访 问 。 MIPS 使

_
-嘈一

用 字 节编址,所以连续的字地址相差 4 。 存储器
用于保存数据结构 、 数组和溢出的寄存器

MIPS 汇编语言

add

$sl, $s2, $s3

减法

sub

$s l, $s2, $s3

立 即数加 法

addi

$s l, $ s 2 , 20

三

三 个寄存器操作数

$s1 = $s2 - $s3

三 个寄存器操作数

$s 1 = $s2 +20

用于加常数数据

本章要讲解的是 MIPS 汇编语言指令 。 示例含义注释信息也可以在 MIPS 参考数据卡的第 1 列中找到

42

-

_

_

MIPS 汇编语言

笫 2 章

将一 个字从内存中
取到寄存器中

数据传输

取字

lw

$s1 ,20 ($s2)

$s1 =Men10ry[ $s2 +20 ]

存字

SW

$s1 ,20 ($ s2 )

Memory [ $s2 +20 ] = $s1

取半字

lh

$s1 ,20 ($s2)

$sl =Memory[ $s2 +20 ]

取无符号半字

lhu

$sl ,20 ($s2)

$sl =_Memory[ $s2 +20 ]

存半字

sh

$s1 ,20 ( $s2 )

Memory [ $s2 +20 ] = $s l

取字节

lb

$s1 ,20 ($s2)

$s1 =Memory [ $s2 +W ]

将一 个字节从内存
取到寄存器中

取无符号 字节

lbu

$s1 ,20 ( $s2 }

$s1 = Memory [ $s2 +20 ]

将 一 个字节从内存
取到 寄存器中

存字节

sb

$s1 ,20 ($s 2)

Memory [ $s2 +20 ] = $s1

将 一 个字节从寄存
器存到内存中

取 链接字

11

$s1 ,20 ($s2}

$s1 = Memory [ $s2 +20 ]

存条件字

SC

$sl ,20 ($s2)

Memory[ $s2 +20 ] = $sl ;
$s1=0orl

取 立 即数的高位

lui

$s1 , 20

$s 1 =20

将半个 字 从内存中
取到寄存器中

将半个 字 从内存中
取到寄存器中

将半个 字 从寄存器
存到内存中

取字作为原子交换
的前半部
存字作为原子交换
的后半部分
取 立 即数 并放到高

* 216

16 位

与

$s1, $s2, $s3

and

将 一 个字 从 寄存器
中取到内存中

$s1 = $s2 & $·s3

三 个寄存器操作数
按位与

三个寄存器操作数

逻辑

条件分支

或

or

或非

nor

立 即数 与

andi

$s1 = $s2 & 20

和常数按位与

立即数或

or1

$s1, $s2 ,20

$s1 = $s2 I 20

和常数按位或

逻辑左移

sll

$s1, $s2 , 10

$sl = $s2 << 10

逻辑右移

srl

$s1, $s2 ,10

$s1 = $s2 >> 10

相 等 时跳转

beq

$s1, $s2 ,25

if( $s1 == $s2) go to
PC +4 + 100

相 等检测 ;
和 PC 相关的跳转

不相等 时跳转

bne

$s1, $s2 ,25

if($s1 ! = $s2) go to
PC+4+100

和 PC 相关的跳转

小于时置位

slt

$s1, $s2, $s3

if( $s2 < $s3) $s1 =I;
else $s1 =0

beq, bne

sltu

$sl, $s2, $s3

if($ s2 < $ s3)
else $s1 =0

号数

无符号 数比较小于时
置位

无符号数比较小于立
即数时 置位

无条件跳转

无符号数 比较小于无
.符号 立 即数时置位

跳转 并链接

$sl, $s2, $s3
$s1, $s2 ,20

$s1 = $s2 I $s3
$s1 = -($s2 I $s3)

$ sl = 1 ;

if($s2 <20 )
else $s1 =0

sltiu $sl, $s2 , 20

if( $s2 <20) $s1 =I;
else $s1 =0

2500
jr

j_al

$ra

$s1 =I;

图 2-1

三个寄存器操作数
按位或非

根据常数左移相
应位

不相等检测;

比较 是否小于;
比较 是否 小 于无符

比 较是否小于常数
比较 是否 小于无符
号常 数

go to 10000

跳转到目标地址

go to $ra

用于 switch 语句,
以及过程调用

$ra = PC +4; go to 10000

2500

按位或

根据常数右移相
应位

slti $s1, $s2 ,20

跳转
跳转至寄存器所指
位置

$s1, $s2, $s3

(续)

用于过程调用

指令:计算机的语言

43

计算机硬件的操作

2.2

毫无及 r:ij' 什算机必镇有执行基璋算术追 I 择忭的指令 。
—<BuTR.j 、

g。坠如C、 切 n

:Neumann, 1947

任何计算机必须能够执行算术运算 。 MIPS 汇编语言的下述记法
add a . b. c

表示将两个变量 b 和 c 相加 , 并将它们的和放入变量 a 中 。
这种记法的表示方式是固定的 : 每条叩汜算术指令只执行一个操作,并且有且仅有 3 个
变量 。 例如,若要将变量 b 、 C 、 d 、 e 之和放入变量 a 中 ( 本节 不深 究”变量 ” 的含义,下一

节将给出其详细说明 ) 。
下面的指 令 序列将完成此 4 个变量的相加:

11
11
fl

The sum of band c is p l aced in a
The sum of b, c , and d is now in a
The sum of b , c, d , and e i s now in a

卢

add a, b, c
add a . a , d
add a , a, e

以上 3 条指令完成了 4 个变 量的 相加 。

上述每行代码中,符号 " II" 右边的是注释 , 用千帮助人们理解程序,而计算机将忽略它

们 。 注意与其他编程语言不同的是 , 这种语言的每一行最多只有一条指令 。 另一个与 C 语言不
同的是 ,注 释总是在一行的末尾结束 c
与加法类似的指 令 一般都有三个操作数:两个进行运算的数和一个保存结果的数 。 要求每
条指 令 有且仅有三个 操 作数,这一点符合硬件简单性的设计原则 : 操作数个数可变将给硬件设

计带来更大的复杂性 ? 这种情况说明了硬件设计三条基本原则的第一条:
设计原则 1: 简单源于规整 。

下面的两个示例程序展示了用高级编程语言编写的程序和用汇编语言编写的程序之间的
关系 。

配例题 · 把 C 语言中两条赋值语句编译成 MIPS
本例中 C 语言程序包含 5 个变量 , a 、 b 、 C 、 d 和 e 。 因为 Java 语言由 C 语言演化而来,
所以本例及以后若干例子对这两种高级语言均适用:
a = b + C;
d = a - e:

将 C 语言 程序转换为 MIPS 汇编指令是由编译器完成的 。 写出由编译器生成的 MIPS 代码 。

配; 答案
一条 MIPS 指令对来自两个源操作数寄存器的操作数进行运算,并将结果存人目的寄存器 。
因此上面两条简单的 C 语句可直接编译为如下两条 MIPS 汇编指令:
。

db
a ..b ..ce
adu
s d a

配例题·把 C 语言中一条复杂的赋值语句编译成 MIPS
下面一行复杂的 C 语句包含 5 个变量 f 、 g 、 h 、 1 和 j:
f = ( g +h ) - ( i + j ) ;

C 编译器将产生什么样的 MIPS 汇编语言代码?

庄答案
因为一条 MIPS 指令仅执行一个操作,所以编译器必须将这条 C 语句编译成多条汇编指令 。

若第 一 条指令计算 g 与 h 的和,其结果必须暂存在某一个地方 。 因此,编译器需创建一个临时

区汇

第 2 章

44

变量 tO :

add tO ,g,h # temporary variable tO contains g + h
虽然下 一 个操作是减法,但在做减法操作之前,必须先计算出 i 与 J 的和 。 因此,第 二 条
指令将 l 、 j 之和存于由编译器创建的另 一个临时变量 tl 中:
add tl,i , j # temporary variab l e tl contains i + j

sub f,tO,tl II f get s tO - tl, which is ( g + h) - ( i +

j )

。

最后,用一条减法指令将两个临时变量中的值相减,结果存入变量 f, 完成编译 :

砃小测验
对于一个给定的功能,用下列哪种编程语言实现可能花费的代码行数最多?将下面 3 种语

言排序 :

I. Java
2. C
3. MIPS 汇编语言

配精解

为了增强可移植性, Java 最初被设定为依靠软件解释器执行的语言 。 解释器的指令

集称作 Java 字节码 ( Java bytecode, 参见 2. 15 节),它与 MIPS 指令集有很大不同 。 为 使

性能与等效功能的 C 程序接近, Java 系统现在的典型做法是将字节码编译成类似 MIPS 这
样的机器指令 。 因为通常 Java 完成编译的时间迟于 C, 所以 Java 编译器常称为即时编译器

(Just In Time , JIT ) 。 2. 12 节展示了在程序启动阶段 JIT 是如何迟于 C 编译器的, 2. 13 节
展示了 Java 程序的编译执行和解释执行的性能比较 。

2.3

计算机硬件的操作数
与高级语言程序不同, MIPS 算术运算指令的操作数是很严格的,它们必须来自寄存器 。

寄存器由硬件直接构建且数量有限,是计算机硬件设计的基,本元素 。 当计算机设计完成后,寄
存器对程序员是可见的,所以也可以把寄存器想象成构造计算机”建筑"的"砖块" 。 在

MIPS 体系结构中寄存器大小为 32 位,由千 32 位为 一组的情况经常出现,因 此在 MIPS 体系结
压妇

构中将其称为字 (word) 。

=

字:计算机中的基本访问单位,通常是 32 位为一组,在 MIPS 体系结构中与寄存器大小
相同 。

高级语言的变量与寄存器的一个主要区别在千寄存器的数量有限, MIPS 一类的典型的现
代计算机中有 32 个寄存器(参见 2.21 节有关寄存器数目的演变历史) 。 下面继续以自顶向下
的方式引人新的 MIPS 语言的符号表示 。 在本节中 MIPS 算术指令的 三 个操作数限定为必须从
32 个 32 位寄存器中选取 。

寄存器个数限制为 32 个的理由可以表示为硬件设计三条基本原则中的第二条 :
设计原则 2: 越小越快 。

大量的寄存器可能会使时钟周期变长,因为电信号传输更远的距离必然花费更长的时间 。
当然,该原则也不是绝对的, 31 个寄存器不见得比 32 个更快。但表象背后的物理事实值
得计算机设计者认真对待 。 在这种情况下,设计者必须在程序期望更多寄存器和加快时钟周期

之间进行权衡 。 另一个不使用多于 32 个寄存器的原因是受指令格式位数的限制,这在 2.5 节
有相应介绍。

指今:计算 机的 语言

45

第 4 章论证了寄存器在硬件结构中所扮演的核心角色 。 正如该章所述,有效利用寄存器对
于提高程序性能极为重要 。
尽管可以简单使用序号 0 - 3 1 表示相应的寄存器,但 MIPS 约定书写指令时用 一 个 .. $,,

符后面跟两个字符来代 表一 个寄存器 c 2. 8 节将解释这一做法的理由 。 现在 , 我们使用 $fl),

s l, …来表示与 C 和 Java 程序中的变量所对应的寄存器;用 $ t0 ,

$ ti , …来表示将程序编译

为 l\'llPS 指 令时所需的临时 寄存器 。

E 例题 · 使用寄存器 编 译 C 赋 值语句
将程序变量和寄存器对 应 起来是 编译器的工作 。 以我们前面讲过的 C 赋值语句为例:
f

=

( g

于

hl

一

(i

+ j ) ;

变量 f 、 g 、 h 、 i 和]依次分配给 寄存器 S s O 、

Ssl 、$ s2 、

S s3 和 $s4 。 编译后的

~flPS 代码是什么?

区工]

配 答案
除了将变量用 上述寄存器代替 . 将 两个临时变量用 $t0 和 $tl 代替外 , 编译后生成的代
码与前面例题中的代码非常相似 :

ado St0 .S sl ,Ss 2 /I regi ster StO conta in s g + h
add st l. Ss3 .Ss4 fl reg i s t e r Stl contain s i + j
SUD SsO, H O,S tl ff f get s stO - Stl . whi ch i s (g + h) - (i + j )

2. 3. 1

D

存储器操作数

编程语 言中,有 像 上面这些例题中仅含一个数据元素的简单变量,也有像数组或结构那样

的复杂数据 结 构 2 这些复杂数据结构中的数据元素可能远多于计算机中寄存器的个数 。 计算机
怎样来表示和访问 这样大的结构 呢?
回忆 一下第 1 章 所描 述的计算机的 5 个组成部分 。 处理

: :

器只能将少量数据保存在寄存器中,但存储器有数十亿的数

2

据元素 C 因此,数据结构 ( 如数组和结构)是存放在存储器
中的 。

。

如 上 所 述, ~llPS 的算术运算指令只对寄存器进行操作,
因此,叩llPS 必 须包含在存 储器和寄存器 之 间传送数据的指
令 。 这些指 令叫作 数据传送指令 ( data transfer instruction ) 。

数据

地址

处理器

存储器

为了 访 问存储器 中的一 个 字 , 指令必须给出存储器 地址 ( address ) 。 存储器就是 一 个很大的下标从 0 开始的 一 维数组,

图 2-2

存储器地址和该地址对应

地址 就相当 千数组的下标 。 例如 , 在图 2- 2 中,第三个数据

的数据 。 如果这些元素是

元素的地址为 2, 存放的数据为 lO c

字,那么这些地址就是错
误的,因为 ~ID'S 实际上

3

3

数据传送指令:在存储器和寄存器之间移动数据的

题节编址的,而一个

命令 。

字是 4 字节 e 图 2- 3 给出

地址:用于在存储器空间中指明某特定数据元素位置

了顺序字编址的内存寻址

的值 。

将数据从存储器复制到寄存器的数据传送指令通常叫取数 (load) 指令 。 取数指令的格式

是操作码后接着目标寄存器,再后面是用来访问存储器的常数和寄存器 。 常数和第 二 个寄存器
中的值相加即得存储器地址 。 实际的 1'>1IPS 取数指令助记符为 lw, 为 load word 的缩写 。

区困

笫 2 章

46

配] 例题·编译一个操作数在存储器中的 C 赋值语句
设 A 是 一 个含有 100 个字的数组,像前面的例题 一 样,编译器仍然将寄存器 $s1 、$ s2
依次分配给变量 g 、 h 。 又设数组 A 的起始地址(或称基址 (base address)) 存放在寄存器$

s3 中 。 试编译下面的 C 赋值语句:
g = h + A[BJ:

配答案
虽然该 C 赋值语句只有 一 个操作,但其中 一 个操作数在存储器中,所以首先必须将 A [ 8]

传送到寄存器中 。 其地址是 $s3 中的基址加上该元素序号 8 。 取回的数据应放在 一 个临时寄存
器中以便下条指令使用 。 由图 2-2 可知,编译后生成的第一条指令为:
lw
HO. 8( $s3) # Temp or a ry reg H O get s A[BJ
(这里是一种简化版描述,后面会对这条指令做相关的微调 。 )因为 A [ 8 ]

已取到寄存器

$t0 中,下一条指令就可对 $t0 进行操作 。 该指令将 h (在 $s 2 中)加上 A [ 8 ]

(在 $t0

中),并将结果放到对应千 g 的寄存器 $s1 中:
add
$s 1,$s2.HO # g = h + A[BJ
数据传送指令中的常量(本例中为 8) 称为偏移量 (offset) , 存放基址的寄存器(本例中

D

为 $s3) 称为基址寄存器 (base register) 。

配硬件/软件接口

除 了 将变量与寄存器对应起来,编译器还在存储器中 为 诸如数 组 和结 构

这样的数据结构 分 配相应的位置 。然 后,编译器可以将它们在存储器中的起始地址放到数

据传送指令中 。
很多程序都用到 8 比特的字节类型,且大多数体系
•

结构按字节编址 。 因此,一个字的地址必和它所包括的

12

4 字节中某个的地址相匹配,且连续字的地址相差 4 。

8

例如,图 2-3 给出了图 2-2 的实际 MIPS 地址,其中第三

4

100
10
101

。

个字的字节地址是 8 。
因为 MIPS 是按字节编址的,所以字的起始地址必
须是 4 的倍数。这叫对齐限制

(alignment restriction) ,

字节地址
处理器

数据

存储器

许多体系结构都有这样的限制(第 4 章说明了对齐能加

快数据传送的理由) 。
有两种类型的字节寻址的计算机:一种使用最左
边或“大端"

(big end) 字节的地址作为字地址;另

一种使用最右边或“小端"

(little end) 字节的地址作

为字地址 。 MIPS 采用的是大端编址 (big- endian) 。

由

于使用相同的地址去访问一个字和 4 个字节时“端”
才起作用,因此大多数情况下不需要关注该问题 。 (附

图 2-3

实际的 MIPS 存储器地

址和该地址对应的数
据 。 相对于图 2-2, 变

化的地址采用高亮显

示 。 由于 MIPS 按字节
编址,而字地址是 4 的
倍数,因为每个字的长
度为 4 字节

录 A 中给出了在一个字中对字节进行记数的两种

方法 。 )
字节寻址也影响到数组下标 。 在上面的代码中,为了得到正确的字节地址,与基址寄
存器 $s3 相加的偏移量必须是 4

X

8, 即 32, 这样才能正确读到 A [ 8], 而不会错读到

A [8/4] 。 (参见 2. 19 节中相关陷阱的介绍 。 )
与取数指令相对应的指令通常叫作存数 (store) 指令;它将数据从寄存器复制到存
储器 。 存数指令的格式和取数指令相似:首先是操作码,接着是包含待存储数据的寄存

指令:计 算机 的语言

47

吾,然后是数组元素的偏移量,最后是基址寄存 器 。同 样, MIPS 地址由常数和基址寄存
峚内容共同决定 。 实际的 MIPS 存 数指令为 SW,
二

即 store word 的 缩写。

对齐限 制 :数据地址与存储器 的自然 边界对齐的要求 。

配 硬件/ 软件接口

巨瓦/

由于 load 和 store 指令中的地址是 二 进制 ,因此 作为 主存的 DRAM 的容量

用 二 进制表示,而非十进制 。 例如 ,使用 geb山ytes (230) 或 tebib)'1es (2的)表示,而不
四abytes (109) 或 terabytes ( 1012) , 见图 1-1 。

口汇

配; 例题 · 用取数/存数指令进行编译
假设变量 h 存放在寄存器 $s2 中,数组 A 的基址放在 $s3 中 。 试编译下面的 C 赋值语句:
A[12] = h + A[8] :

亚答案
虽 然该 C 语句只有一个操作.但是有两个操作数在存储器中,因此,需要更多的 MIPS 指
令 。 前两条指令基本上与上个例题相同,除了本例在取数指令中选择 A [ 8 ] 时使用了字节寻
址中正确的偏移量 . 并且加法指令将结果放在临时寄存器 $t0 中 :
lw
H0 . 32 ( $s3 ) If Tempor a ry reg HO gets A[BJ
add stO. Ss2. stO If Temporary reg stO gets h + A[BJ
最后一条指令使用 48 ( 4

X

12 ) 作为偏 移量 , 寄存器 $s3 作为基址寄存器,将加法结果存

放到存储器单元 A [ 12] 中 。

sw

H0.48 ( Ss 3 )

H Stores

h +

A[BJ back into A[12]

lw 和 SW 是 MIPS 体系结构中在存储器和寄存器之间复制字的指令 。 其他计算机有各自相应
的取数/存数指令来传送数据 。 Intel x86 体系结构中类似的指令见 2. 17 节 。

配} 硬件/软件接口

D

许多程序的变量个数 要远 多 于 计算机的 寄存器 个数。 因此 ,编 译器会尽

量将最常用的变量保持在寄存器中,而将其他的变量放在存储器中,方法是使用取数/存

数指令在寄存吾和存储器之间传送变量。将不常使用的变 量(或稍后才使用的变量)存
回到存储 导中 的过程叫作寄存器沿出

( spilling) 。

根据硬件设计原则 2, 存储器一定比寄存器慢,因为寄存器数量更少。事实的确如
此,访问寄存导中的数据要远快 于 访问 存储器中的数据 。

,

另外,寄存器中的数据更容易利用。 一 条 MIPS 算术运算指令能完成读两 个 寄存器、

对它 们 进行运算以及写回运算结果的操作。而 一 条 MIPS 数据传送指令 只能完成读 一 个 橾
作数或 写 一 个操作数的操作 ,并且不能对它们进行运算 。

寄存导与存储器相比,访问时间短、 吞吐率高,寄存器中的数据 访问 速度 快并易 于 利
用,访问寄存器相对于访问存储器功耗 更 小 。 因此,为了获得高性能和节约功耗,指令集

的体系结构必须拥有足够的寄存 器,并且编译器 必须 高 效率地利用 这些寄存器 。

2.3.2

常数或立即数操作数

程序中经常会在某个操作中使用到常数~ 将数组的下标加 1' 用以指向下一个数
组元素 。 实际上,在运行 SPEC CPU 2006 测试基准程序集时,有超过一半的 MIPS 算术运算指
令会用到常数作为操作数 。

仅从已介绍过的指令看,如果要使用常数必须先将其从存储器中取出 。 (常数可能是在程
序被加载时放人存储器的 。 )例如,要使寄存器 $s3 加 4, 可以使用下面的代码:

口工

笫 2 章

48

lw $t0, AddrConstant4($ s 1)
add $s 3 ,$ s3,$t0

扑

$t0

11 $s3

= constant 4
= $s3 + HO (HO= 4)

假设 $s1 + AddrConstant4 是常量 4 的存储器地址 。
避免使用取数指令的另一方法是,提供其中一个操作数是常数的算术运算指令 。 这种有 一
个常数操作数的快速加法指令叫作加立即数 (add immediate) , 或者写成 addi 。 这样,上述操
作只需写成:

addi

$s3 , $s3 , 4

# $s3 - $s3 + 4

常数操作数出现频率高,而且相对千从存储器中取常数,包含常数的算术运算指令执行速

度快很多,并且能耗较低 。
常数 0 还有另外的作用,有效使用它可以简化指令集 。 例如,数据传送指令正好可以被视
作 一 个操作数为 0 的加法 。 因此, MIPS 将寄存器 $zero 恒