Computer Organization and Design:The Hardware/Software Interface我們能體驗的最美好的事物是神秘,它是所有真正的藝術和科學的源泉。
——阿爾伯特·愛因斯坦,《我的信仰》,1930關于本書在學習計算機科學與工程時,除了掌握計算的基本原理外,還應該了解該領域的最新進展。各種計算領域中的讀者應有機會學習計算機系統的組成理論,因為這是決定計算機系統的功能、性能甚至成功與否的關鍵。
現代計算機技術需要各種計算方面的專家,他們應對硬件和軟件都有深入的理解。硬件和軟件在多個層次上的相互關系成為理解計算基本原理的框架。無論你的主要興趣是硬件還是軟件,是計算機科學還是電氣工程,計算機組成與設計的基本思想都是相同的。因此,本書著重展示硬件與軟件的關系,并重點介紹當今計算機中的基礎概念。
近年來,處理器已經由單核發展為多核,這也印證了本書自第1版就預測的發展趨勢。有些程序員忽略了這一發展趨勢,他們希望計算機體系結構專家、編譯器設計者和芯片工程師能夠幫助他們,讓程序不做任何修改就可以更快或更高效地在新型處理器上運行。但是,這樣的時代已經一去不返了。為了使程序運行得更快,必須將其并行化。然而,許多研究者的目標是希望程序員在編寫程序時不需要考慮硬件的并行特征,這一目標要很多年才能實現。至少在下一個十年里,大多數程序員必須理解硬件/軟件接口,才能編寫出能在并行計算機上高效運行的程序。
本書適合以下讀者:在匯編語言或邏輯設計方面只有少許經驗,需要理解基本計算機組成的讀者;具有匯編語言或邏輯設計的基礎,需要學習如何設計計算機,或者要進一步理解計算機系統如何工作的讀者。
與本書相關的另一本書有些讀者可能已經熟悉作者的另一本書《Computer Architecture:A Quantitative Approach》。該書已廣為流傳,經常以作者姓名命名,稱為“Hennessy and Patterson”(本書則常稱為“Patterson and Hennessy”)。我們寫該書的目的是要用堅實的工程基礎和量化的性價比權衡來描述計算機體系結構的原理。我們以商用系統為例,用測量的方法來描述實際的設計經驗。我們的目標是用量化的方法而不是用描述的方法學習計算機體系結構,希望這一方法有助于培養能精確理解計算機的專業人才。
機械工業出版社已出版了本書的第3版、第4版和第5版影印書,書名為《計算機體系結構:量化研究方法》。——編輯注本書的大多數讀者并不一定要成為計算機體系結構的設計者。但是,未來軟件設計人員對與軟件系統協同工作的基本硬件技術的理解程度,將直接影響軟件系統的性能和能效。因此,編譯器設計者、操作系統設計者、數據庫程序員以及其他大多數軟件工程師對本書的原理必須有充分的了解。同樣,硬件設計者也必須清楚地理解他們的工作對軟件的相應影響。
所以,本書的內容遠多于“Hennessy and Patterson”,而且進行了大量修訂,以適應不同專業的讀者。我們對再版“Hennessy and Patterson”時刪除的大量介紹性材料的效果感到滿意,這使得新版與第1版內容的重疊大大降低,本書亦如此。
第5版的變化第5版有6個主要的目標:使用運行例子的方法論證理解硬件的重要性;對前面已經提到的重要技術采用黑體的方式進行強調;對例子進行了更新,以反映從PC時代到后PC時代的發展;將I/O吞吐率方面的材料貫穿在整本書中,而不是集中在一章中;對技術內容進行了更新,以反映自2009年第4版出版以來工業界的變化;將附錄和可選章節(目錄中帶有圖標的章節)的內容放在互聯網上(booksite.elsevier.com/9780124077263/index.php),而不是放在CD上,降低了本書的成本,也使該版本變成了一部電子書。
在詳細介紹第5版的修訂目標之前,首先看下表。該表給出了本書的主要內容,并為關注硬件和關注軟件的兩種讀者分別進行了導讀。其中,第1、4、5和6章對兩種讀者同等重要。第1章討論了能耗的重要性和由其引發的處理器從單核向多核的轉變,并介紹了計算機設計中的8個偉大思想。第2章對于硬件讀者來說很可能是復習性材料,而對于軟件讀者來說則是重要的閱讀材料,特別是希望深入學習編譯器和面向對象編程語言的讀者。第3章適合對定點運算或者浮點運算感興趣的讀者,有些讀者可能不需要學習第3章。然而,我們將在本章介紹矩陣乘法運行的例子,展示如何采用子字并行方法將性能提高4倍,因此不要跳過3.6~3.8節。第4章介紹了流水線處理器。其中,4.1、4.5和4.10節給出了流水線概述,4.12節給出了進一步提高矩陣乘法運算性能的方法,這些小節對于軟件設計者來說比較重要。對于硬件設計者,第4章是核心內容。另外,根據讀者知識背景的不同,可以選擇是否首先閱讀附錄C中的邏輯設計部分。最后一章是多核、多處理器和集群系統,這一章是全新的內容,因此所有讀者都應該閱讀。本版的重要組織結構是使許多思想的引入更加自然,例如GPU、倉儲式計算機和集群系統中的關鍵——網絡接口卡的軟硬件接口。
章/附錄 節 關注軟件 關注硬件第1章 計算機概要與技術1.1~1.111.12(歷史)第2章 指令:計算機的語言2.1~2.142.15(編譯器和Java)2.16~2.202.21(歷史)附錄E RISC指令集體系結構E.1~E.17第3章 計算機的算術運算3.1~3.53.6~3.8(子字并行)3.9~3.10(謬誤)3.11(歷史)附錄B 邏輯設計基礎B.1~B.13第4章 處理器4.1(引言)4.2(邏輯設計慣例)4.3~4.4(簡單實現)4.5(流水線概述)4.6(流水線數據通路)4.7~4.9(冒險和異常)4.10~4.12(并行和實例)4.13(Verilog流水線控制)4.14~4.15(謬誤)4.16(歷史)(續)章/附錄節關注軟件關注硬件附錄D 控制通路的硬件實現D.1~D.6第5章 大容量和高速度:開發存儲器層次結構5.1~5.105.11(廉價冗余磁盤陣列) 5.12(Verilog cache控制器)5.13~5.165.17(歷史)第6章 從客戶端到云的并行處理器6.1~6.86.9(網絡)6.10~6.146.15(歷史)附錄A 匯編器、鏈接器和SPIM仿真器A.1~A.11附錄C 圖形處理單元C.1~C.13仔細閱讀 有時間閱讀 作為參考 回顧或閱讀 拓展閱讀第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指令集。
第四個目標是將I/O吞吐率方面的材料貫穿在整本書中,而不是集中在一章中,這與第4版中將并行性貫穿全書一樣,因此,本版可在1.4、4.9、5.2、5.5、5.11和6.9節中找到I/O相關的材料。我們的想法是如果不把這些內容集中在一章,則讀者(和教師)能更好地學習與掌握I/O。
計算機是一個快速發展的領域,對于本書新的版本也是如此,編寫新版的一個重要目的是更新技術內容。實際的例子就是反映后PC時代特點的ARM Cortex A8和Intel Core i7,其他的亮點包括新的ARMv8 64位指令集、講解GPU特有術語的教程、組成云的倉儲式計算機的內涵以及對10G以太網卡的深入理解。
為了保持紙質書的厚度及其與電子書的兼容性,我們一改以前版本的做法,將可選內容由隨書CD改為網絡在線的形式。
最后,我們更新了本書的所有練習題。
在對內容進行修訂的同時,我們保留了以往版本中有用的元素。為使本書更好地作為參考書,我們還在新術語第一次出現時給出了定義。書中標題為“理解程序性能”部分的內容有助于讀者理解程序的性能,以及如何提高性能,就像書中“硬件/軟件接口”部分會幫助讀者理解有關接口的權衡問題一樣。“重點”部分仍然存在,以使讀者看到整個“森林”而不是每一棵“樹”。每章最后提供“小測驗”部分的答案,幫助讀者在第一時間加強對內容的理解。本版同樣提供了MIPS參考數據(這是從IBM System/360“綠卡”得到的靈感),并對數據進行了更新,在編寫MIPS匯編語言程序時,這應該是一個很好的參考。
教學支持 愛思唯爾(ELS):關于本書教輔資源,使用教材的老師需通過愛思唯爾的教材網站(www.textbooks.elsevier.com)注冊并通過審批后才能獲取相關資源。具體方法如下:在www.textbooks.elsevier.com教材網站查找到該書后,點擊“instructor manual”便可申請查看該教師手冊。有任何問題,請致電010-85208853。——編輯注我們收集了大量材料供教師授課使用,包括題解、圖表、幻燈片等,可從出版商處獲得。如需更多信息,請訪問網址:textbooks.elsevier.com/9780124077263。
本版標志著Hennessy和Patterson自1989年以來長期合作的第二次中止。由于要管理一所世界知名的大學,Hennessy校長將不能繼續承擔新版本的實際編寫工作。留下Patterson一人感覺自己像個總是和伙伴們一起演出的演員,突然被推到前臺獨自表演。所以,在致謝名單中列出的人和Berkeley的同行們在本書的撰寫過程中甚至起了更大的作用。
第5版致謝在本書的每一版中,我們都非常幸運地得到了來自許多讀者、評審者和其他人員的幫助。每個人的幫助都使本書更加完美。
由于第6章做了巨大的修改,因此我們對其思想和內容進行了單獨的評審,并基于每位評審人的反饋意見做了修改。感謝Stanford大學的Christos Kozyrakis,他建議在集群中使用網絡接口來論證I/O的軟硬件接口,并對該章的組織提出了意見。還要感謝Stanford大學的Mario Flagsilk,他提供了NetFPGA NIC的細節、表格以及性能評估。另外,以下人員對本章提出了修改建議:Northeastern大學的David Kaeli、HP實驗室的Partha Ranganathan、Wisconsin大學的David Wood以及Berkeley大學的同事Siamak Faridani、Shoaib Kamil、Yunsup Lee、Zhangxi Tan和Andrew Waterman。
我們要對UC Berkeley的Rimas Avizenis表示特別的感謝,他開發了不同版本的矩陣乘法程序,并提供了相應的性能數據。當我在UCLA讀研究生時,我與他的父親一起工作,能夠與他一起在UCB共事是一件美好的事情。
我也要對我的長期合作伙伴——UC Berkeley的Randy Katz表示感謝。我們共同講授研究生的計算機體系結構課程,他在開發計算機體系結構的偉大思想方面提供了很大的幫助。
感謝David Kirk、John Nickolls和他們在 NVIDIA的同事們(Michael Garland、John Montrym、Doug Voorhies、Lars Nyland、Erik Lindholm、Paulius Micikevicius、Massimiliano Fatica、Stuart Oberman、Vasily Volkov)提供了第一個深入介紹GPU的附錄。再次感謝Jim Larus,他現在是EPFL計算機與通信科學學院的院長,為本書發揮了在匯編語言方面的專長,歡迎本書讀者使用他所開發和維護的模擬器。
非常感謝South Carolina大學的Jason Bakos,他在第4版的基礎上對本版的練習題進行了更新。第4版的練習題由以下人員編寫:Perry Alexander(Kansas 大學)、Javier Bruguera(de Santiago de Compostela大學)、Matthew Farrens(California大學Davis分校)、David Kaeli(Northeastern大學)、Nicole Kaiyan(Adelaide大學)、John Oliver(Cal Poly,San Luis Obispo)、Milos Prvulovic(Georgia理工大學)和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(Georgia理工),Partha Ranganathan(HP實驗室),David Wood(Wisconsin大學),Craig Zilles(Illinois大學香檳分校)。
參考調查和審閱的學者:Mahmoud Abou-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 Bonomo(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州立大學),Nathaniel 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大學),Georgia 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 Izadi(New York州立大學New Paltz分校),Reza Jafari,Robert W.Johnson(Colorado Technical大學),Bharat Joshi(North Carolina大學Charlotte分校),Nagarajan Kandasamy(Drexel大學),Rajiv Kapadia,Ryan Kastner(California大學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(Saint Joseph大學),Angkul Kongmunvattana(Columbus州立大學),April Kontostathis(Ursinus學院),Christos Kozyrakis(Stanford大學),Danny Krizanc(Wesleyan 大學),Ashok Kumar,S.Kumar(Texas 大學),Zachary Kurmas(Grand Valley州立大學),Robert N.Lea(Houston大學),Baoxin Li(Arizona州立大學),Li Liao(Delaware大學),Gary Livingston(Massachusetts大學),Michael Lyle,Douglas W.Lynn(Oregon理工學院),Yashwant K Malaiya(Colorado州立大學),Bill Mark(Texas大學Austin分校),Ananda Mondal(Claflin大學),Alvin Moser(Seattle大學),Walid Najjar(California大學Riverside分校),Danial J.Neebel(Loras學院),John Nestor(Lafayette學院),Jae C.Oh(Syracuse大學),Joe Oldham(Centre學院),Timour Paltashev,James Parkerson(Arkansas大學),Shaunak 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 Richards(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 Taubin(Boston大學),Will Thacker(Winthrop大學),Mithuna Thottethodi(Purdue大學),Manghui Tu(Southern Utah大學),Dean Tullsen(UC San Diego分校),Rama Viswanathan(Beloit學院),Ken Vollmar(Missouri州立大學),Guoping Wang(Indiana-Purdue大學),Patricia Wenner(Bucknell大學),Kent Wilken(California大學Davis分校),David Wolfe(Gustavus Adolphus學院),David Wood(Wisconsin大學Madison分校),Ki Hwan Yum(Texas大學San Antonio分校),Mohamed Zahran(New York城市學院),Gerald D.Zarnett(Ryerson大學),Nian Zhang(South Dakota School of Mines & Technology),Jiling Zhong(Troy大學),Huiyang Zhou(Central Florida大學),Weiyu Zhu(Illinois Wesleyan大學)。
特別感謝Mark Smotherman一遍又一遍地查找本書中的技術錯誤和寫作錯誤,他的工作顯著地改進了這一版的質量。
還要感謝Morgan Kaufmann公司同意在Todd Green和Nate McFadden的領導下對本書進行再版,沒有他們的工作,我不可能完成本書。我們還要感謝Lisa Jones和Russell Purdy,她們分別負責管理出版過程和封面設計。新封面將本版中后PC時代的內容和第1版的封面呼應了起來。
以上提到的近150名人士為本版提供了大量幫助,使之成為我們希望的最好的書。
David A.Patterson
David A. Patterson,加州大學伯克利分校計算機科學系教授,IEEE和ACM會士,美國國家工程院、國家科學院和美國藝術與科學院院士,美國計算機歷史博物館院士,并入選硅谷工程名人堂。Patterson曾榮獲加州大學杰出教學獎、ACM Karlstrom獎、IEEE Mulligan教育獎章和本科生教學獎。由于對RISC技術的貢獻,他獲得了IEEE技術成就獎和ACM Eckert-Mauchly獎;而在RAID方面的貢獻為他贏得了IEEE Johnson信息存儲獎;他還和Hennessy分享了IEEE John von Neumann獎章和C&C獎金。Patterson作為美國總統信息技術顧問委員會委員,還曾擔任計算機研究協會(CRA)主席和ACM主席。這些杰出的工作使他榮獲了ACM和CRA頒發的杰出服務獎。
John L. Hennessy,斯坦福大學的第10任校長,從1977年開始在該校電子工程與計算機系任教。Hennessy教授是IEEE和ACM會士,美國國家工程院、國家科學院和美國哲學院院士,美國藝術與科學院院士。他獲得過眾多獎項,包括:2001年Eckert-Mauchly獎,以表彰他對RISC技術的貢獻;2001年Seymour Cray計算機工程獎;2000年與Patterson共同獲得IEEE John von Neumann獎章。他還擁有7個榮譽博士學位。1981年,Hennessy在斯坦福大學開始MIPS研究項目,1984年參與創建MIPS計算機系統(現在的MIPS技術公司),開發了第一款商用RISC微處理器。除了技術活動與大學工作外,他還是多家創業公司的顧問和投資者。
王黨輝,1975年生于陜西省周至縣。2005年獲得西北工業大學計算機學院工學博士學位。現為西北工業大學計算機學院副教授。2007年在比利時魯汶大學和歐洲微電子中心(IMEC)進修,2012~2013年8月在美國匹茲堡大學電子與計算機工程系訪問研究。主要研究方向為計算機系統結構、新型存儲系統、高可靠計算機系統等。承擔“計算機組成原理”“計算機系統結構”“匯編語言與接口技術”等課程的教學工作。
康繼昌,1930年生于上海市。1951年畢業于交通大學電機工程系。歷任哈爾濱軍事工程學院講師、副教授,西北工業大學教授、系主任,中國航空學會第二、三屆理事,國務院學位委員會第一、二、三屆學科評議組成員。長期從事機載計算機的研究工作。20世紀60年代初主持研制成功我國第一臺機載計算機,并得到推廣應用。后又主持研制成功多種型號的計算機。
安建峰,1977年生于河北省保定市。2009年獲得西北工業大學計算機學院工學博士學位。現為西北工業大學計算機學院副教授。2010年在比利時魯汶大學和歐洲微電子中心(IMEC)進修,2014年在新加坡國立大學計算機學院訪問研究。主要研究方向為高性能計算機體系結構、嵌入式系統軟硬件協同設計、FPGA可重構電路等。承擔“計算機組成原理”“計算機系統結構”“SoC設計方法學”等課程的教學工作。
出版者的話
本書贊譽
譯者序
前言
作者簡介
第1章 計算機概要與技術1
1.1 引言1
1.1.1 計算應用的分類及其特性2
1.1.2 歡迎來到后PC時代3
1.1.3 你能從本書學到什么4
1.2 計算機系統結構中的8個偉大思想6
1.2.1 面向摩爾定律的設計6
1.2.2 使用抽象簡化設計6
1.2.3 加速大概率事件6
1.2.4 通過并行提高性能7
1.2.5 通過流水線提高性能7
1.2.6 通過預測提高性能7
1.2.7 存儲器層次7
1.2.8 通過冗余提高可靠性7
1.3 程序概念入門7
1.4 硬件概念入門10
1.4.1 顯示器11
1.4.2 觸摸屏12
1.4.3 打開機箱12
1.4.4 數據安全15
1.4.5 與其他計算機通信16
1.5 處理器和存儲器制造技術17
1.6 性能20
1.6.1 性能的定義20
1.6.2 性能的度量22
1.6.3 CPU性能及其因素23
1.6.4 指令的性能24
1.6.5 經典的CPU性能公式25
1.7 功耗墻27
1.8 滄海巨變:從單處理器向多處理器轉變29
1.9 實例:Intel Core i7基準31
1.9.1 SPEC CPU基準測試程序31
1.9.2 SPEC功耗基準測試程序32
1.10 謬誤與陷阱33
1.11 本章小結35
1.12 歷史觀點和拓展閱讀36
1.13 練習題36
第2章 指令:計算機的語言40
2.1 引言40
2.2 計算機硬件的操作43
2.3 計算機硬件的操作數44
2.3.1 存儲器操作數45
2.3.2 常數或立即數操作數47
2.4 有符號數和無符號數48
2.5 計算機中指令的表示53
2.6 邏輯操作58
2.7 決策指令60
2.7.1 循環61
2.7.2 case/switch語句63
2.8 計算機硬件對過程的支持64
2.8.1 使用更多的寄存器66
2.8.2 嵌套過程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 分支和跳轉中的尋址76
2.10.3 MIPS尋址模式總結78
2.10.4 機器語言解碼79
2.11 并行與指令:同步81
2.12 翻譯并執行程序83
2.12.1 編譯器83
2.12.2 匯編器84
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 用數組實現clear96
2.14.2 用指針實現clear97
2.14.3 比較兩個版本的clear97
2.15 高級內容:編譯C語言和解釋Java語言98
2.16 實例:ARMv7(32位)指令集98
2.16.1 尋址模式99
2.16.2 比較和條件分支100
2.16.3 ARM的特色100
2.17 實例:x86指令集102
2.17.1 Intel x86的改進102
2.17.2 x86寄存器和數據尋址模式103
2.17.3 x86整數操作105
2.17.4 x86指令編碼107
2.17.5 x86總結108
2.18 實例:ARMv8(64位)指令集108
2.19 謬誤與陷阱109
2.20 本章小結110
2.21 歷史觀點和拓展閱讀111
2.22 練習題112
第3章 計算機的算術運算117
3.1 引言117
3.2 加法和減法117
3.3 乘法121
3.3.1 順序的乘法算法和硬件121
3.3.2 有符號乘法124
3.3.3 更快速的乘法124
3.3.4 MIPS中的乘法124
3.3.5 小結125
3.4 除法125
3.4.1 除法算法及其硬件結構125
3.4.2 有符號除法128
3.4.3 更快速的除法128
3.4.4 MIPS中的除法129
3.4.5 小結129
3.5 浮點運算130
3.5.1 浮點表示131
3.5.2 浮點加法135
3.5.3 浮點乘法138
3.5.4 MIPS中的浮點指令139
3.5.5 算術精確性145
3.5.6 小結146
3.6 并行性和計算機算術:子字并行148
3.7 實例:x86中流處理SIMD擴展和高級向量擴展149
3.8 加速:子字并行和矩陣乘法150
3.9 謬誤與陷阱153
3.10 本章小結155
3.11 歷史觀點和拓展閱讀158
3.12 練習題159
第4章 處理器162
4.1 引言162
4.2 邏輯設計的一般方法165
4.3 建立數據通路167
4.4 一個簡單的實現機制173
4.4.1 ALU控制173
4.4.2 主控制單元的設計175
4.4.3 為什么不使用單周期實現方式181
4.5 流水線概述182
4.5.1 面向流水線的指令集設計186
4.5.2 流水線冒險186
4.5.3 對流水線概述的小結191
4.6 流水線數據通路及其控制192
4.6.1 圖形化表示的流水線200
4.6.2 流水線控制203
4.7 數據冒險:旁路與阻塞206
4.8 控制冒險214
4.8.1 假定分支不發生215
4.8.2 縮短分支的延遲215
4.8.3 動態分支預測216
4.8.4 流水線小結220
4.9 異常221
4.9.1 MIPS體系結構中的異常處理221
4.9.2 在流水線實現中的異常222
4.10 指令級并行226
4.10.1 推測的概念227
4.10.2 靜態多發射處理器227
4.10.3 動態多發射處理器231
4.10.4 能耗效率與高級流水線233
4.11 實例:ARM Cortex-A8和Intel Core i7流水線234
4.11.1 ARM Cortex-A8235
4.11.2 Intel Core i7 920236
4.11.3 Intel Core i7 920的性能238
4.12 運行更快:指令級并行和矩陣乘法240
4.13 高級主題:通過硬件設計語言描述和建模流水線來介紹數字設計以及更多流水線示例242
4.14 謬誤與陷阱242
4.15 本章小結243
4.16 歷史觀點和拓展閱讀243
4.17 練習題243
第5章 大容量和高速度:開發存儲器層次結構252
5.1 引言252
5.2 存儲器技術255
5.2.1 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 cache缺失處理265
5.3.3 寫操作處理266
5.3.4 一個cache的例子:內置FastMATH處理器267
5.3.5 小結269
5.4 cache性能的評估和改進270
5.4.1 通過更靈活地放置塊來減少cache缺失272
5.4.2 在cache中查找一個塊275
5.4.3 替換塊的選擇276
5.4.4 使用多級cache結構減少缺失代價277
5.4.5 通過分塊進行軟件優化280
5.4.6 小結283
5.5 可信存儲器層次283
5.5.1 失效的定義283
5.5.2 糾正一位錯、檢測兩位錯的漢明編碼(SEC/DED)284
5.6 虛擬機287
5.6.1 虛擬機監視器的必備條件289
5.6.2 指令集系統結構(缺乏)對虛擬機的支持289
5.6.3 保護和指令集系統結構289
5.7 虛擬存儲器290
5.7.1 頁的存放和查找293
5.7.2 缺頁故障294
5.7.3 關于寫297
5.7.4 加快地址轉換:TLB297
5.7.5 集成虛擬存儲器、TLB和cache 300
5.7.6 虛擬存儲器中的保護302
5.7.7 處理TLB缺失和缺頁303
5.7.8 小結307
5.8 存儲器層次結構的一般框架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:一種理解存儲器層次結構行為的直觀模型312
5.9 使用有限狀態機來控制簡單的cache314
5.9.1 一個簡單的cache314
5.9.2 有限狀態機315
5.9.3 一個簡單的cache控制器的有限狀態機316
5.10 并行與存儲器層次結構:cache一致性317
5.10.1 實現一致性的基本方案318
5.10.2 監聽協議319
5.11 并行與存儲器層次結構:冗余廉價磁盤陣列320
5.12 高級內容:實現cache控制器320
5.13 實例:ARM Cortex-A8和Intel Core i7的存儲器層次結構320
5.14 運行更快:cache分塊和矩陣乘法324
5.15 謬誤和陷阱326
5.16 本章小結329
5.17 歷史觀點和拓展閱讀329
5.18 練習題329
第6章 從客戶端到云的并行處理器340
6.1 引言340
6.2 創建并行處理程序的難點342
6.3 SISD、MIMD、SIMD、SPMD和向量機345
6.3.1 在x86中的SIMD:多媒體擴展346
6.3.2 向量機346
6.3.3 向量與標量的對比347
6.3.4 向量與多媒體擴展的對比348
6.4 硬件多線程350
6.5 多核和其他共享內存多處理器352
6.6 圖形處理單元簡介355
6.6.1 NVIDIA GPU體系結構簡介356
6.6.2 NVIDIA GPU存儲結構357
6.6.3 GPU展望358
6.7 集群、倉儲級計算機和其他消息傳遞多處理器360
6.8 多處理器網絡拓撲簡介363
6.9 與外界通信:集群網絡366
6.10 多處理器測試集程序和性能模型366
6.10.1 性能模型368
6.10.2 Roofline模型369
6.10.3 兩代Opteron的比較370
6.11 實例:評測Intel Core i7 960和NVIDIA Tesla GPU的Roofline模型373
6.12 運行更快:多處理器和矩陣乘法376
6.13 謬誤與陷阱378
6.14 本章小結379
6.15 歷史觀點和拓展閱讀381
6.16 練習題382
附錄A 匯編器、鏈接器和SPIM仿真器389
附錄B 邏輯設計基礎437
索引494