處理器架構練習題 (Practice - Processor Architecture)


Question 1 - Programmer-Visible State [recall]

Y86-64 的 programmer-visible state 包含哪些元件?program registers 有幾個?與 x86-64 相比少了哪一個、為什麼?


Question 2 - Condition Codes 與 OPq 限制 [recall]

Y86-64 中哪些指令會設定 condition codes?OPq 指令的運算元有什麼限制?若想計算「%rax 加上常數 8」需要幾條指令?


Question 3 - 指令編碼 [application]

寫出下列兩條指令的 byte 編碼(hex):

subq %rdx, %rbx
irmovq $4, %rcx

Question 4 - Stat 狀態碼 [recall]

列出 Y86-64 的四種 Stat 狀態碼(名稱與意義)。本章的簡化設計中,遇到非 AOK 的狀態時處理器會怎麼做?


Question 5 - HCL Case Expression [recall]

HCL 的 case expression 與 C 的 switch 有哪些關鍵差異?default case 怎麼寫?這個特性如何幫助化簡選擇運算式?


Question 6 - SEQ 六階段 [recall]

依序列出 SEQ 處理指令的六個階段,並指出各階段產生的主要訊號。new PC 有哪三個可能的來源?


Question 7 - SEQ 指令追蹤 [application]

SEQ 執行 pushq %rdx 時,已知 R[%rsp]=0x108、R[%rdx]=9,指令位於位址 0x030。
寫出各階段的具體計算:valP、valA、valB、valE、記憶體動作與寫回結果。


Question 8 - pushq 與 popq 的位址慣例 [recall]

pushq 的記憶體寫入位址與 popq 的記憶體讀取位址分別使用哪個訊號?popq %rsp 執行後 %rsp 的值是什麼(E、M 兩個寫入埠如何取捨)?


Question 9 - No Reading Back 原則 [recall]

SEQ 時序設計中的「no reading back」原則是什麼?以 pushq 為例說明此原則如何被遵守。


Question 10 - 管線計算題 [application]

一個 3-stage 管線各段組合邏輯延遲為 80 / 120 / 100 ps,每個 pipeline register 延遲 20 ps。
求:最小時脈週期、throughput(GIPS)、latency。哪個 stage 每週期閒置最久?


Question 11 - Clock 快慢的影響 [recall]

在管線系統中,把 clock 放慢會發生什麼事?把 clock 調得太快又會發生什麼事?為什麼兩者不對稱?


Question 12 - Forwarding 來源與優先序 [recall]

PIPE 的 forwarding 有哪 5 個來源、哪 2 個目的地?轉發優先序的原則是什麼、為什麼?


Question 13 - 管線控制動作 [recall]

什麼是 bubble?寫出三種控制情況(processing ret、load/use hazard、mispredicted branch)各自在 F、D、E 三個管線暫存器的控制動作與代價。


Question 14 - Load/Use Hazard 分析 [analysis]

考慮以下 Y86-64 片段:

mrmovq 0(%rdx), %rax
addq   %rbx, %rax

為什麼純 forwarding 無法解決這個 hazard,而一般的 OPq→OPq 相依卻可以?PIPE 實際採用什麼機制、偵測條件為何?


Question 15 - 控制組合 B 分析 [analysis]

當 execute 階段是一條寫入 %rsp 的 mrmovq、而 decode 階段是 ret 時,load/use hazard 與 processing ret 兩種條件同時成立
天真地把兩組控制動作用 OR 合併,D 暫存器會發生什麼錯誤?正確的處理方式是什麼?這個案例給硬體設計什麼教訓?


Question 16 - CPI 效能分析 [application]

某 PIPE 處理器:load 指令占 25%(其中 20% 造成 load/use)、條件分支占 20%(誤預測率 40%)、ret 占 2%(必停)。
bubble 數分別為 1、2、3。計算 CPI,並指出最值得優先改善的項目。