
提到計算機體系結構很多人第一反應是背名詞Cache、流水線、Tomasulo、MESI……但真到期末拿到卷子才發(fā)現(xiàn)拉開差距的全是“算”出來的題而不是名詞默寫。山東大學的計算機體系結構課程通常會從指令集和性能量化講起一路推進到流水線、存儲層次和多核一致性問題表面上是概念多、模型多實際上是一條非常清晰的“成本、性能、功耗之間做權衡”的主線。這份清單不是簡單羅列知識點而是幫你把整門課的骨架抽出來。我會把每個模塊里最??肌⒆钊菀族e、最能拉開分差的內容按主線串起來配上計算公式、答題套路和備考優(yōu)先級適合正在上這門課的同學、準備期末的考研黨以及想快速捋清體系結構核心框架的自學者。1. 主線怎么串ISA、微架構和量化權衡1.1 體系結構、組成與實現(xiàn)三層關系別混很多同學第一節(jié)課就懵了體系結構、計算機組成、計算機實現(xiàn)這三個概念到底差在哪我當時也繞了很久后來用一句話記住了——ISA指令集體系結構是軟硬件之間的契約微架構是這份契約的硬件實現(xiàn)方式。計算機體系結構關注程序員能看到的機器屬性包括指令集、寄存器、尋址方式、數(shù)據(jù)類型這些決定了軟件能怎么用硬件。計算機組成關注微架構層面的設計比如ALU怎么組織、數(shù)據(jù)通路怎么連、流水線怎么劃分。計算機實現(xiàn)更偏向物理實現(xiàn)關注邏輯門、電路布線、工藝參數(shù)?!爸噶罴瘹w體系結構管數(shù)據(jù)通路和控制器歸組成管電路實現(xiàn)歸物理設計管”這是山大課程里反復強調的分層思想??荚嚾绻龊喆痤}讓你區(qū)分這三者一定要舉具體例子比如“加法指令存在”是體系結構的事“加法器用超前進位還是行波進位”是組成的事“加法器用多少納米的工藝實現(xiàn)”是實現(xiàn)的事。1.2 ISA設計看什么寄存器、尋址方式與指令格式ISA部分的考點相對固定不會太深但容易出選擇、填空和名詞解釋。核心就三塊寄存器組織MIPS/RISC-V里通用寄存器數(shù)量、用途約定為什么寄存器不能太少也不能太多。尋址方式立即數(shù)、寄存器、基址偏移、PC相對尋址、偽直接尋址??荚嚦=o一條指令讓你判斷用的哪種尋址。指令格式R型、I型、S型、U型等字段劃分和位寬要能看懂。山大的題通常會給指令編碼讓你反推操作碼和寄存器編號。CISC和RISC的對比也是高頻簡答題。對比維度建議從指令長度、尋址方式數(shù)量、寄存器數(shù)量、是否支持訪存指令、硬布線還是微程序控制這幾個角度展開。記住一句話RISC把復雜度從硬件挪給了編譯器CISC相反。1.3 這門課的底層思維方式量化比較體系結構區(qū)別于其他硬件課的關鍵是它不做“能不能實現(xiàn)”的判斷而是做“值不值得實現(xiàn)”的權衡。比如加一個轉發(fā)通路能減少多少停頓加一級Cache能把失效率降到多少這些都靠量化分析。所以復習時不要背概念要背公式、會算例。后面每一章我都會把最核心的計算公式單獨拉出來這些才是考試真正的得分點。2. 性能與Amdahl所有計算題的“第一性原理”2.1 CPU性能公式的正確打開方式整個體系結構課程里最基礎也最重要的公式就是CPU時間CPU時間 指令數(shù)IC × 平均CPI × 時鐘周期長度其中時鐘周期長度 1 / 時鐘頻率。做題時單位換算最容易踩坑GHz和秒的關系一定要算清楚。舉個例子某程序有100萬條指令平均CPI為2.0處理器頻率2GHz則執(zhí)行時間 1,000,000 × 2.0 / 2,000,000,000 0.001秒即1ms。這個公式看起來簡單但很多題目會反過來考你給定時間反推CPI、給定CPI變化反推指令數(shù)變化。你要清楚IC、CPI、時鐘頻率三者是相互制約的。編譯器優(yōu)化可能減少指令數(shù)但引入了更復雜的指令、CPI反而升高流水線深度增加可能提高頻率但分支預測失敗懲罰也變大。我復習時喜歡把這類題的所有變量列成表先標出哪些變化、哪些不變再套公式基本不會錯。2.2 Amdahl定律與多核下的變形Amdahl定律是用來衡量“優(yōu)化某一部分后整個系統(tǒng)能快多少”的工具公式長這樣系統(tǒng)加速比 1 / [ (1 - Fe) Fe / Se ]Fe可增強部分占原執(zhí)行時間的比例Se該部分增強后的加速比考試最愛考的場景是某個功能模塊占程序執(zhí)行時間的40%把它優(yōu)化10倍總加速比是多少代入公式1 / (0.6 0.4/10) 1 / 0.64 ≈ 1.5625。注意不是10倍也不是2.5倍因為不能被優(yōu)化的60%始終拖后腿。還有一個變形就是多核并行場景程序有s比例的部分無法并行剩余1-s可以無限并行那么n核加速比 1 / (s (1-s)/n)。當n趨向無窮時加速比上限是1/s這就是Amdahl對多核性能的警示。2.3 功耗墻新時代的性能指標近幾年山大試卷里逐漸開始出現(xiàn)功耗相關題目畢竟體系結構教材都在強調功耗墻。你需要掌握動態(tài)功耗公式動態(tài)功耗 P ≈ αCV2fα是翻轉率C是電容V是電壓f是頻率。從公式能看出降電壓對功耗的降低是平方級的但電壓又不能無限降因為閾值電壓限制。這就解釋了為什么單核頻率很難無限提升廠商轉而去堆多核、做亂序執(zhí)行和專用加速器。做題時經(jīng)常會問“電壓降一半、頻率降為原來0.8功耗變?yōu)槎嗌佟敝苯影垂剿憔托袆e漏掉頻率的線性影響。3. 數(shù)據(jù)表示與運算器補碼、IEEE 754和加法器考點3.1 補碼運算與溢出判斷計算機組成課里就講過補碼但山大體系結構考試依然會牽涉到運算和溢出判斷。核心考點有幾個補碼的表示范圍n位補碼范圍為-2^(n-1)到(2^(n-1)-1)這個不對稱特性經(jīng)常考填空。加減法統(tǒng)一用加法器A-B就是A加B的補碼。溢出判斷兩個正數(shù)相加結果為負或兩個負數(shù)相加結果為正說明溢出更通用的方法是最高位進位和符號位進位相異則溢出。舉個例子4位補碼549已經(jīng)超過范圍直接計算010101001001結果是負數(shù)顯然溢出。這種題屬于送分題但很多人上來忘了補碼范圍直接算錯。3.2 IEEE 754浮點數(shù)從規(guī)格化到舍入浮點數(shù)這章幾乎每年都出計算題重點就是IEEE 754標準。單精度格式是1位符號位、8位階碼、23位尾數(shù)階碼偏置值是127雙精度對應11位階碼、52位尾數(shù)、偏置值1023。規(guī)格化數(shù)的取值范圍、非規(guī)格化數(shù)denormal作用、無窮大和NaN的編碼規(guī)律這三塊是填空和判斷的常客。轉換計算題有個固定套路把-6.75轉成IEEE 754單精度格式。 第一步符號位為1。 第二步6.75 110.11B規(guī)格化為1.1011 × 2^2。 第三步階碼E 2 127 129 10000001B。 第四步尾數(shù)取規(guī)格化后小數(shù)點后的1011后面補零到23位。 最終結果1 10000001 10110000000000000000000。很多人丟分在忘記隱含的整數(shù)位“1”或者沒有把階碼加上偏置。練習時建議至少手算10個正負數(shù)轉換做到閉眼都能寫出步驟。舍入模式也要了解默認的是就近舍入注意“正好在中間時舍入到偶數(shù)尾數(shù)”這條規(guī)則選擇題喜歡考。3.3 運算部件進位鏈、Booth與除法器山大這門課對運算部件的考察程度取決于你之前有沒有上過計算機組成。如果組成學得扎實這節(jié)可以快速過如果是跨考或學得稀碎需要補三個核心點超前進位加法器理解generateGA·B和propagatePA⊕B以及進位表達式C(i1)G(i)P(i)·C(i)。這是把串行進位延遲變成并行計算的關鍵。Booth乘法通過編碼減少部分積的數(shù)量理解為什么能處理補碼乘法不需要單獨處理符號位。不恢復余數(shù)除法掌握流程和判斷規(guī)則這個考得不多但一旦考到就是計算大題。復習建議是不要去背電路圖會推導進位表達式、會做一行Booth編碼表就夠了。4. 存儲層次Cache、頁表和TLB的得分套路4.1 局部性原理與存儲層次存儲層次是體系結構里最“劃算”的一章知識點結構清晰題型固定拿分效率極高。根基是局部性原理時間局部性訪問過的數(shù)據(jù)短期內還會訪問和空間局部性訪問過的地址附近很可能被訪問。存儲層次由寄存器、Cache、主存、磁盤組成往上速度越快、成本越高、容量越小往下的數(shù)據(jù)是上層的后備。經(jīng)典問題“為什么 Cache 不能做得又大又快”就是成本與性能權衡的體現(xiàn)。4.2 Cache三大映射方式與地址字段Cache計算題基本必考務必吃透下面這套參數(shù)C Cache總容量S 組數(shù)E 每組行數(shù)相聯(lián)度B 塊大小字節(jié)關系式C S × E × B。地址被劃分成三個字段Tag標記、Index組索引、Block Offset塊內偏移。塊內偏移位數(shù) log2(B)組索引位數(shù) log2(S)Tag位數(shù) 地址總位數(shù) - 塊內偏移位數(shù) - 組索引位數(shù)。給出一道山大規(guī)模常見題64KB Cache4路組相聯(lián)塊大小64B32位物理地址求Index位數(shù)和Tag位數(shù)。 塊內偏移 log2(64) 6位。 Cache總行數(shù) 64KB / 64B 1024行。 組數(shù)S 1024 / 4 256組Index log2(256) 8位。 Tag 32 - 6 - 8 18位。這種題想拿滿分的訣竅是畫一張“地址分段”圖把每段位數(shù)標在對應位置再列式計算閱卷老師看著也清晰。三種映射方式要會對比直接映射硬件簡單但沖突率高全相聯(lián)靈活、沖突率低但比較器太多組相聯(lián)是折中方案。填表對比這幾個維度基本是考試標配。4.3 替換算法與寫策略怎么選替換算法考點主要是LRU、FIFO和隨機。LRU要會模擬給一個訪問序列按組內行數(shù)維護一個“最近使用順序”缺頁時替換最久未使用的行。模擬時不建議心算畫一個小表格一行代表一個Cache行列寫訪問序列遇到缺失標個M有同學對MVP算法結構進行模擬。寫策略四象限必須分清楚寫直達 寫不分配寫直達 寫分配寫回 寫分配寫回 寫不分配常見組合是“寫回配寫分配寫直達配寫不分配”。要理解為什么寫回時如果寫不分配數(shù)據(jù)不進Cache后續(xù)讀又缺失寫回的意義就不大了。平均訪存時間公式也要背AMAT 命中時間 失效率 × 缺失代價給定命中時間、失效率、缺失代價就能算。有的題會考增加Cache容量后命中時間增加、失效率降低問總效果是變好還是變壞本質就是代入公式算量化結果。4.4 虛擬內存與TLB的完整翻譯流程虛擬內存的核心是把虛擬地址翻譯成物理地址。頁表是存在主存里的映射表TLB是頁表的Cache用于加速地址翻譯。做題時一定要畫出下面的流程用虛擬頁號查詢TLBTLB命中直接拿到物理頁號拼接頁內偏移TLB缺失去查內存中的頁表頁表命中更新TLB并返回物理地址頁表也缺失觸發(fā)缺頁異常從磁盤換入頁面常見錯誤是把TLB缺失和缺頁搞混。TLB缺失只代表地址翻譯緩存沒命中頁表可能還在內存里而缺頁是頁面壓根不在物理內存中必須從磁盤調入代價高得多。多級頁表的題目偶爾出現(xiàn)核心是理解每一級頁表索引怎么分割地址。山大近年喜歡把TLB和Cache串在一道題里先算TLB的索引和Tag再算Cache的Index和Tag完整做一遍比單純背結論有用得多。5. 流水線三類冒險、轉發(fā)和分支預測怎么用5.1 從單周期到五級流水線流水線這章是課程最大的一座山理解難度高、計算題多、概念題也多。先要搞清單周期和流水線的本質區(qū)別單周期時鐘長度由最慢指令決定所有指令都執(zhí)行一個很長的時鐘周期流水線把指令執(zhí)行分成IF、ID、EX、MEM、WB五段每個時鐘周期可以啟動一條新指令時鐘長度由最慢段決定理想情況下吞吐率提升為原來近5倍但單條指令的延遲并沒有降低??荚嚦3龅幕居嬎泐}給出五段每段延遲求單周期時鐘周期和流水線時鐘周期。流水線時鐘周期 max(各段延遲) 流水線寄存器開銷千萬別漏掉寄存器延遲。5.2 三類冒險的判定與解決冒險是流水線的核心內容必須能用“指令序列五級流水線圖”判斷出會出現(xiàn)什么冒險、在哪個周期停頓。三類冒險定義結構冒險硬件資源沖突比如只有一個存儲器IF和MEM同時訪問。解決方法是分離指令Cache和數(shù)據(jù)Cache。數(shù)據(jù)冒險后面指令用到前面指令還沒寫回的結果最常見的是RAW相關??刂泼半U分支指令改變了PC導致預取的指令作廢。數(shù)據(jù)冒險的判定要能寫出來例如lw t0, 0(t1) add t2, t0, t3add在ID階段需要讀t0而lw要到WB階段才寫回t0如果不處理add會讀到舊值。處理方法優(yōu)先級是先轉發(fā)解決不了再停頓。轉發(fā)旁路是最重要的機制。要能看出從EX/MEM寄存器或MEM/WB寄存器把結果直接送到EX段ALU的輸入。但如果第一條是lw、第二條馬上用它的結果轉發(fā)也來不及因為數(shù)據(jù)要到MEM段才有結果這時必須插一個氣泡stall??刂泼半U的代價計算也很??肌@缥寮壛魉€中分支在ID段確定那么每次分支即使預測成功也可能有1個周期損失如果默認不跳轉且實際跳轉。計算CPI的典型公式CPI 1 分支頻率 × 分支懲罰周期如果分支占20%每次分支懲罰2個周期則CPI 1 0.2×2 1.4。5.3 分支預測與超標量基礎分支預測的考點包括靜態(tài)預測總是跳轉/總是不跳轉、一位動態(tài)預測和兩位飽和計數(shù)器預測。兩位飽和計數(shù)器狀態(tài)機強跳轉→弱跳轉→弱不跳轉→強不跳轉要能畫出來。BTB分支目標緩沖器的簡單原理是緩存最近分支指令地址和目標地址取指階段直接用目標地址替代順序地址。超標量部分重點理解“每周期發(fā)射多條指令”的含義掌握IPC每周期執(zhí)行指令數(shù)概念知道多發(fā)射分為靜態(tài)調度和動態(tài)調度兩大流派這是下一章Tomasulo算法的引子。6. 指令級并行與多核Tomasulo和MESI的提分區(qū)間6.1 Tomasulo算法與亂序執(zhí)行指令級并行ILP依賴硬件動態(tài)調度Tomasulo算法是必須會分析的經(jīng)典。考試通常以簡答或大題形式出現(xiàn)讓你分析某條指令在哪個周期發(fā)射、執(zhí)行、寫結果。Tomasulo的核心部件有保留站Reservation Station、寄存器結果狀態(tài)表、公共數(shù)據(jù)總線CDB。關鍵機制是寄存器重命名——通過保留站保存指令的源操作數(shù)消除了WAR和WAW冒險。做題前先把概念理清Issue發(fā)射指令從指令隊列進入保留站如果操作數(shù)就緒則標記為Vj否則記錄來自哪個保留站Qj。Execute執(zhí)行兩個源操作數(shù)都就緒后開始計算。Write Result寫結果結果通過CDB廣播給所有等待該結果的保留站和寄存器。我復習時專門畫過一個三行指令的跟蹤表第一列是周期序號第二列是每條指令當前狀態(tài)第三列是CDB上傳送的值。這個表一畫完整個算法的邏輯就清楚了。6.2 多核、緩存一致性與MESI多核必考緩存一致性因為每個核都有自己的Cache如果核A改了變量x核B還持有舊副本程序就錯了。解決思路是讓所有Cache對同一地址的訪問達成一致。MESI協(xié)議要掌握四個狀態(tài)ModifiedM數(shù)據(jù)被修改只在當前核緩存中與內存不一致需要寫回。ExclusiveE數(shù)據(jù)只緩存在當前核與內存一致。SharedS數(shù)據(jù)可能在多個核中緩存均與內存一致。InvalidI緩存行無效。狀態(tài)轉換常見的考點是當前緩存行是Modified時發(fā)生本地寫命中不需要向總線發(fā)消息直接修改如果狀態(tài)是Shared本地寫命中需要向其他核發(fā)送Invalidate使其他副本失效。監(jiān)聽協(xié)議適合總線互連簡單但擴展性差目錄協(xié)議引入目錄記錄每個塊的共享狀態(tài)更適合大規(guī)模多核。這個對比經(jīng)常作為簡答題。6.3 存儲一致性模型與互連網(wǎng)絡存儲一致性模型是更高一層的約束。順序一致性最嚴格但性能受限x86用的是TSO全存儲定序通過寫緩沖提升性能代價是讀操作可能讀到舊值。判斷題如果出現(xiàn)“x86禁止寫緩沖重排”就是錯的?;ミB網(wǎng)絡的拓撲幾乎年年沾邊總線、環(huán)形、交叉開關、2D Mesh。要會判斷拓撲的度、直徑、對分帶寬。例如2D Mesh的直徑隨節(jié)點數(shù)開方增長而總線、交叉開關的直徑分別是1和1但交叉開關成本是O(n2)。沒有電路基礎也不用慌用“城市路網(wǎng)”類比來記總線是一條單行路mesh是棋盤網(wǎng)格。7. 期末復習節(jié)奏與高頻易錯點7.1 高頻考點分層表最后一個月如果時間不夠先按下面的優(yōu)先級推進優(yōu)先級考點板塊常見題型建議投入時間高Cache地址字段與命中率計算計算題2天高流水線冒險與轉發(fā)/停頓大題/計算3天高Amdahl與CPU性能公式計算1天中IEEE 754轉換計算/填空1天中MESI狀態(tài)轉換簡答/選擇1.5天中Tomasulo指令跟蹤大題/簡答2天低互連網(wǎng)絡拓撲細節(jié)選擇/填空0.5天低功耗公式選擇/計算0.5天注意這個優(yōu)先級只是通用經(jīng)驗具體以老師畫的重點為準。如果老師上課反復強調某個方向那優(yōu)先級一定要調。7.2 大題專門練的答題套路計算題想拿高分光會算不行要按閱卷老師喜歡的格式寫。我建議每道大題都固定四步寫已知條件把題目給的參數(shù)翻譯成公式變量。畫圖或分字段Cache題畫地址位分段流水線題畫周期表格。代公式先寫公式再代入數(shù)字避免跳步。寫結論帶單位必要時一句話說明結果的含義。比如Cache題第一步就寫出B64、E4、C64KB再算S再算Index位數(shù)、Tag位數(shù)。每一步都有得分點只寫最終答案一旦算錯就全盤皆輸。7.3 復習時間安排與資料建議正常節(jié)奏建議三輪復習。第一輪用5到7天把PPT和教材過一遍重點理解主線概念這輪不用刷太多題第二輪用5天左右集中刷題每一章先做教材例題再做課后題第三輪考前3天只看錯題和公式卡把高頻公式默寫一遍。資料方面山大本科生可以重點看課上配套PPT和課后作業(yè)如果想加深理解胡偉武的《計算機體系結構教學與習題指導第2版》題目風格貼近國內考試Patterson Hennessy的《計算機體系結構量化研究方法》適合啃核心章節(jié)性能公式、Cache、流水線、多處理器。不建議一上來就刷國外大部頭容易陷入細節(jié)。7.4 我踩過的坑和最后提醒每次說復習總會有人倒在同一個坑里沉迷看網(wǎng)課大腦覺得“我會了”一合上書本連Cache的Index位數(shù)都算不出來。體系結構這門課非常吃“手動計算”尤其是指令級并行和Cache模擬題目一定要拿起筆在紙上完整算一遍算錯的地方才是你真正缺的知識點。另一個經(jīng)驗是考前至少完整模擬一套歷年題。不要分章節(jié)做掐時間、拿白紙、按考場狀態(tài)寫答案。我當年就是模擬的時候發(fā)現(xiàn)流水線大題寫得太慢最后考試時調整了答題順序先寫計算后寫簡答才沒在小題上耗太長時間。這套清單覆蓋了山東大學計算機體系結構課程絕大部分核心考點但“看了”和“會了”之間還差著一輪又一輪的練習。把重點公式抄在卡片上把錯題標出來反復做這門課拿高分的難度其實比你想象中低得多。