108 年 國立中正大學電機工程學系碩士班信號與媒體通訊組《計算機組織》
- (20%) Please tell the difference of:
第 1-(a) 題5 分
(a) Data hazard & control hazard
登入後即可作答並保存紀錄。
核心觀念
-
Data hazard(資料危險):在流水線(pipeline)執行時,前一指令的執行結果尚未寫回或尚未可供後續指令使用,導致後續指令因讀取到錯誤或未更新的資料而產生衝突。常見類型包括
- RAW (Read‑After‑Write):後指令讀取前指令尚未完成寫入的目標暫存器。
- WAR (Write‑After‑Read):後指令寫入的暫存器在前指令尚未完成讀取前就被改寫。
- WAW (Write‑After‑Write):兩指令寫入同一暫存器,後指令需在前指令寫入完成後才能正確執行。
-
Control hazard(控制危險):分支指令(branch)或跳轉指令的目標位址在取指階段尚未確定,使得流水線無法確定下一個要取的指令是哪一條。若分支預測錯誤,已取的指令必須被撤銷(flush),造成效能損失。
解題方法
- 先說明 資料危險 與 控制危險 的產生時機與根本原因:
- 資料危險源於 指令間的資料相依(data dependency)。
- 控制危險源於 指令流的控制相依(control dependency),即分支的結果決定下一條指令。
- 以流水線的五階段(IF, ID, EX, MEM, WB)為例,描述兩種危險在各階段的影響:
- RAW:在 WB 階段才寫回寄存器,若後續指令在 EX 階段需要該寄存器,就會發生 RAW。
- 分支指令:在 ID 階段才判斷分支條件,若在 IF 階段已經取了錯誤路徑的指令,則產生 control hazard。
- 介紹常見的 解決手法:
- 資料危險:前饋(forwarding / bypass)、插入 NOP(stall)、使用讀後寫(read‑after‑write)排程、重新排列指令。
- 控制危險:分支預測(static / dynamic)、預取(branch delay slot)、流水線清除(flush)及重新取指。
選項分析(若本題為簡答題,以下列點說明正確與錯誤的常見敘述)
- A. Data hazard 與 control hazard 都是因為指令間的相依關係
第 1-(b) 題5 分
(b) Branch prediction & branch delay slot
登入後即可作答並保存紀錄。
核心觀念
-
分支預測 (Branch Prediction):在指令流水線中,當執行到分支指令(如
beq,bne)時,CPU 必須先決定分支是否成立才能決定下一條要取的指令。分支預測是透過硬體或軟體機制,在分支條件尚未計算完成前,提前猜測分支方向(taken / not‑taken),以免流水線因等待分支結果而停頓。常見的預測方法有靜態預測(固定假設 always‑taken、always‑not‑taken、根據分支偏移方向等)以及動態預測(2‑bit saturating counter、全局/本地歷史表、TAGE 等)。 -
分支延遲槽 (Branch Delay Slot):在某些 RISC 架構(如 MIPS)中,分支指令的執行會產生一個或多個「延遲槽」——即分支指令之後的若干條指令在分支決定之前仍會被執行。這是因為在取指階段就已經把分支目標預取到 PC,導致 PC 仍然向前走了幾個時鐘週期。若能在延遲槽內放置不受分支影響的指令,就能避免流水線空轉。
解題方法
-
定義差異:先說明兩者在 「何時」 介入與 「目的」 為何不同。
- 分支預測:在 分支條件尚未求值 前,猜測分支方向,以保持流水線連續。
- 分支延遲槽:在 分支指令已取回 後,固定執行 若干條指令,不論分支結果如何。
-
實作層面:比較硬體需求與編譯器支援。
- 預測需要 分支預測單元、歷史表、回饋回路,屬於 硬體複雜度 的提升。
- 延遲槽則是 指令編排 的問題,主要由 編譯器 或 手寫彙編 把有意義的指令填入,硬體本身只要支援「延遲執行」即可。
-
效能影響:
- 正確預測可讓流水線 無中斷,錯誤預測則必須 清除/重填,代價高達 10–20 個週期(視流水線深度而定)。
- 延遲槽若填滿有用指令,可減少 1–2 個週期 的空轉;若填不了,就只能執行 NOP,等於浪費了槽位。
第 1-(c) 題5 分
(c) CPU time & CPU clock cycle
登入後即可作答並保存紀錄。
核心觀念
- CPU 時間 (CPU time):指程式在 CPU 上執行所消耗的實際時間。常以秒 (s) 為單位,衡量的是「使用者」感受到的執行時間。
- CPU 時脈週期 (CPU clock cycle):CPU 時脈的基本單位,一個週期代表時脈訊號從一個上升沿到下一個上升沿的時間間隔。常以「週期」或「ticks」表示,與實際時間的關係由 時脈頻率 (Clock Frequency) 決定。
- 時脈頻率 (f):每秒鐘的週期數,單位 Hz (cycles/s)。常用 MHz、GHz 表示。
- 指令週期 (CPI, Cycles Per Instruction):平均每條指令需要的時脈週期數。
- 指令數 (IC, Instruction Count):程式要執行的指令總數。
關鍵公式
其中
- CPU cycles =
- clock frequency 為每秒的週期數 (例如 cycles/s)。
解題方法
-
分辨概念
- CPU 時間 為「時間」層面的度量;
- CPU 時脈週期 為「週期」層面的度量。
-
使用公式
- 若已知指令數與 CPI,可先求出總 CPU cycles;再以頻率換算成時間。
- 反之,若已知 CPU 時間與頻率,可逆算出 CPU cycles。
-
舉例說明(非題目必需,但有助於加深理解)
假設一段程式執行 10⁶ 条指令,平均 CPI = 2,CPU 時脈頻率 = 2 GHz
第 1-(d) 題5 分
(d) Split cache & Set associative cache
登入後即可作答並保存紀錄。
核心觀念
本題的核心在於釐清快取記憶體(Cache Memory)在「功能劃分/內容分離(Functionality / Content Partitioning)」與「組織架構/映射方式(Internal Organization / Placement Policy)」兩個不同正交(orthogonal)維度上的設計概念:
-
Split Cache(分離式快取):
- 依存放內容分類:將快取依據處理器存取的資訊型態,硬體上實體分離為專門存放指令的 I-Cache(Instruction Cache) 與專門存放資料的 D-Cache(Data Cache)。
- 主要目的:解決管線化處理器(Pipelined Processor)中,IF(Instruction Fetch)階段與 MEM(Memory Access)階段同時存取記憶體所引發的結構相依/結構衝突(Structural Hazard),同時使快取可針對指令與資料各自特有的存取局部性(Locality)分別最佳化。
- 其相對概念為 Unified Cache(統一快取),即指令與資料共用同一個快取。
-
Set-Associative Cache(組相聯快取):
- 依區塊映射規則分類:快取被劃分為若干個「組(Set)」,每個組內包含 個「行/區塊(Cache Lines/Blocks)」,稱為 -way Set-Associative。
- 映射規則:主記憶體區塊位址對應到固定的 Set:
但進入特定 Set 內部後,可放置於該 Set 中的任一個空閒或被置換的 Line 之中(關聯度搜尋)。 - 主要目的:在 Direct-Mapped Cache(直接映射快取)(碰撞失效率高、命中時間短)與 Fully-Associative Cache(全相聯快取)(無衝突失效、硬體代價與命中時間高)之間取得平衡,透過增加關聯度(Associativity)來降低衝突失效(Conflict Miss)。
解題方法
回答本題的破題關鍵在於指出:兩者屬於不同層次(維度)的快取分類標準,不可混為一談;在現代處理器設計中,兩者常同時並存(例如 L1 快取常採用「Split」架構,而其中的 I-Cache 與 D-Cache 各自內部均採用「-way Set-Associative」組織)。
回答應從「定義與設計出發點」、「所處維度與對照組」、「解決的問題」以及「彼此之交互關係」四個維度進行對比剖析:
| 比較項目 | Split Cache(分離式快取) | Set-Associative Cache(組相聯快取) |
|---|---|---|
| 分類標準 | 快取所儲存的內容/功能類別 | 快取內部的位址映射與擺放策略(Placement Policy) |
| 相對概念 | Unified Cache(統一快取) | Direct-Mapped Cache、Fully-Associative Cache |
- (15%) Assume a digital interface is designed with the timing sequence and positive edge triggered inputs as:
🖼️【此處有附圖,請對照原卷】
第 2.1 題10 分
2.1 (10%) Please indicate two main problems of such interface design.
登入後即可作答並保存紀錄。
核心觀念
正緣觸發輸入會在時脈上升緣取樣。被取樣的資料與控制訊號,必須在上升緣前後維持穩定:
- 建立時間 :訊號須在上升緣前穩定至少一段時間。
- 保持時間 :訊號須在上升緣後繼續穩定至少一段時間。
解題方法
對照圖中的時序可見,Data 與 Control 都在時脈正緣附近改變:它們在正緣時才升高,並在正緣後不久又下降。因此,這兩個訊號都沒有滿足取樣所需的穩定時間。
兩個主要問題
第 2.2 題5 分
2.2 (5%) Please re-draw the timing sequence so that the interface can work correctly.
登入後即可作答並保存紀錄。
核心觀念
正緣觸發的介面會在時脈由低轉高的瞬間取樣輸入。取樣前,資料與控制訊號必須先穩定一段時間,稱為建立時間;取樣後也必須維持穩定一段時間,稱為保持時間。
若資料或控制訊號恰好在正緣改變,接收端可能無法正確判讀該次取樣。因此,兩者都必須在每個正緣附近維持不變:
解題方法
原圖中,Data 與 Control 在時脈正緣附近改變,無法保證建立時間與保持時間。可將輸入訊號的轉換安排在時脈負緣,讓 Data 與 Control 在下一個正緣到來前先穩定,並在正緣後繼續維持。
以下保留原圖在各正緣預期取樣的高、低值;Data 與 Control 的波形相同:
- (15%) Assume a pipelined control datapath is designed as:
🖼️【此處有附圖,請對照原卷】
第 3.1 題5 分
3.1 (5%) Please explain the reason for pipeline registers holding data and control signals.
登入後即可作答並保存紀錄。
核心觀念
管線暫存器(IF/ID、ID/EX、EX/MEM、MEM/WB)位於各管線階段之間,用來在時脈邊緣保存某一指令的中間資料與控制訊號。這讓多條指令能同時處於不同階段執行,而每個階段都能取得屬於該指令的正確資訊。
資料訊號包含後續階段需要的指令欄位、暫存器讀值、立即值、ALU 結果或記憶體資料。控制訊號則指定後續操作,例如 ALU 運算、資料記憶體讀寫,以及暫存器寫回方式。
解題方法
沿著圖中的管線追蹤一條指令:控制單元在解碼階段產生控制訊號,並將它與指令所需資料一同存入 ID/EX;之後,資料和控制訊號隨指令傳到 EX/MEM、MEM/WB,供各階段完成運算、記憶體存取及結果寫回。
第 3.2 題5 分
3.2 (5%) For the MEM hazard, what kind of instruction set will trigger forward from MEM/WB stage?
登入後即可作答並保存紀錄。
核心觀念
本題考的是五級管線中的資料相依與資料前推。當目前在 EX 階段的指令需要某個暫存器值,而較早的指令尚未把結果寫回暫存器檔時,前推單元可直接從管線暫存器取得新值,送到 ALU 輸入端。
解題方法
若目前 EX 階段指令的來源暫存器,與 MEM/WB 階段指令的目的暫存器相同,而且該 MEM/WB 指令會寫回暫存器,就會觸發從 MEM/WB 前推:
並且目的暫存器符合目前指令的來源暫存器:
或
第 3.3 題5 分
3.3 (5%) While a branch is taken, why hazard detection has to flush IF/ID and update the value in PC?
登入後即可作答並保存紀錄。
核心觀念
分支成立會造成控制危障:處理器在確認分支結果前,可能已依序取入下一條指令;但分支成立後,這條順序路徑上的指令不應執行。因此要清除錯誤路徑指令,並讓 PC 改指向分支目標位址。
解題方法
原圖是含 IF、ID、EX、MEM、WB 階段的管線資料路徑,標示了 PC、IF/ID 暫存器,以及 PCWrite 和 IF/IDWrite。其中 IF/IDWrite 是寫入致能訊號;原圖沒有標出獨立的 IF/ID 清除訊號,而禁止寫入只會保留暫存器中的內容,不能代替清除。
分支成立時,控制流程如下:
- 順序取指可能已將下一條指令放入 IF/ID;分支成立後,這條指令屬於錯誤路徑。
第 4 題8 分
- (8%) It takes 100 sec to execute a program, where "multiply" accounts for 90 sec. How much improvement in "multiply" performance to get 4x improvement overall?
登入後即可作答並保存紀錄。
核心觀念
- Amdahl 定律:在提升程式中某一部分的效能時,整體加速比受該部分執行時間比例所限制。
其中 為欲加速部份佔原始執行時間的比例, 為該部份的加速倍數, 為整體加速倍數。
解題方法
- 計算「multiply」在原始程式中佔的比例
- 設欲得到的整體加速倍數為 4 倍,即 。代入 Amdahl 定律,解 :
- (12%) For the 32-bit multiplier below,
🖼️【此處有附圖,請對照原卷】
第 5.1 題6 分
5.1 (6%) How to store 32-bit multiplicand, 32-bit multiplier, and 64-bit product with one 64-bit register and one 32-bit register?
登入後即可作答並保存紀錄。
核心觀念
這題考的是移位加法乘法器:把乘數與部分乘積放在同一個 64 位元暫存器中,逐位檢查乘數的最低位元,必要時將被乘數加到部分乘積,再將整個暫存器右移。
解題方法
設 64 位元暫存器為 ,32 位元暫存器為 :
- 將 32 位元被乘數存入 。
- 初始化 :高 32 位元設為 ,低 32 位元放入 32 位元乘數。因此, 同時保存部分乘積與尚待處理的乘數。
- 重複 32 次:
- 檢查 的最低位元 。
- 若 ,將 加到 的高 32 位元。
- 將整個 向右移一位。
- 32 次迴圈結束後, 的 64 位元內容就是乘積。
第 5.2 題6 分
5.2 (6%) Give the algorithm flowchart of the "control test" unit.
登入後即可作答並保存紀錄。
核心觀念
這題考「移位加法乘法器」的控制流程。64 位元暫存器同時存放部分乘積與乘數:高 32 位元存部分乘積,低 32 位元存尚未處理的乘數。控制單元每回合檢查低位元 ;若 ,就把被乘數加到高 32 位元,再將整個 64 位元暫存器右移一位。重複 32 回合後,暫存器內即為 64 位元乘積。
解題方法
先把 64 位元暫存器記作 ,其中 是高 32 位元、 是低 32 位元;另以 32 位元暫存器保存被乘數 。初始化為 、,並令回合計數器 。
每回合依序執行:
- 檢查 。若 ,令 ;若 ,不做加法。
- 將串接的 邏輯右移一位。右移時保留加法結果的進位,使其進入高位端。
- 令 。若 ,開始下一回合;若 ,結束,乘積位於 。
控制流程圖
第 6 題10 分
- (10%) Given the code written in C, where elements within the same row are stored contiguously, references to which variables exhibits temporal locality? Why?
for (j = 0; j < 8; j++)
for (i = 0; i < 8000; i++)
A[i][j] = B[j][0] + A[j][i];
登入後即可作答並保存紀錄。
核心觀念
- 暫時性局部性 (Temporal Locality):指同一記憶體位置在短時間內被多次存取。
- 空間局部性 (Spatial Locality):指相鄰記憶體位置在短時間內被存取。
- 記憶體排佈:題目說「同一列的元素連續存放」,在 C 語言的 列優先 (row‑major) 佈局下,
A[i][j]的 第 i 列 內的所有j位置是連續的,而A[i][j]與A[i][j+1]之間的位址相差一個元素大小。
解題方法
- 先寫出程式的四個記憶體存取:
A[i][j](寫)B[j][0](讀)A[j][i](讀)
- 觀察迴圈結構:外層
j固定後,內層i從 0 走到 7999。 - 依照 同一變數在同一次外層迭代內是否被重複使用 來判斷暫時性局部性。
變數的暫時性局部性分析
| 變數 | 讀/寫 | 在內層 for (i) 中的存取模式 | 暫時性局部性? | 理由 |
|---|
第 7 題10 分
- (10%) Translate the following MIPS code to C. Assume that the variables , , , , and are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the based address of the arrays A and B are in register $s6 and $s7, respectively.
addi $t0, $s6, 4
add $t1, $s6, $0
sw $t1, 0($t0)
lw $t0, 0($t0)
add $s0, $t1, $t0
登入後即可作答並保存紀錄。
核心觀念
本題測試MIPS 指令與 C 語言對應的能力,包含:
- 記憶體位址運算:使用
addi、add計算陣列元素的位址。 - 資料存取指令:
sw(store word)寫入記憶體,lw(load word)讀取記憶體。 - 暫存器與變數的映射:題目已把變數 g、i、s0‑s6、$s7。
- 指令序列的資料流:必須追蹤每個暫存器的值如何變化,最後得到 $s0(即變數 f)的值。
解題方法
依序解讀每條指令,寫出對應的 C 程式碼(或等價的運算式),同時說明每一步對暫存器與記憶體的影響。
| MIPS 指令 | 目的 | C 語言等價 |
|---|---|---|
addi $t0, $s6, 4 | 取得陣列 A 的第二個元素(索引 1)的位址(因為每個元素 4 byte) | int *addr = A + 1; |
add $t1, $s6, $0 | 將 A 的基址複製到 $t1,相當於 addr0 = A; | int *addr0 = A; |
sw $t1, 0($t0) | 把 $t1(即 A 的基址)寫入位於 addr(A[1])的記憶體位置 | *(addr) = (int)addr0; // 以整數形式存放指標值 |
lw $t0, 0($t0) | 從剛才寫入的記憶體位置 (A[1]) 讀回值,放入 $t0 | t0 = *(addr); |
add $s0, $t1, $t0 | 把 $t1(A 的基址)與 $t0(剛讀回的值)相加,結果存入 $s0(即變數 f) | f = (int)addr0 + t0; |
把上述步驟整理成完整的 C 程式片段:
第 8 題10 分
- (10%) Convert to the IEEE 754 single-precision floating-point format with one sign bit, 8-bit exponent, and 23-bit fraction.
登入後即可作答並保存紀錄。
核心觀念
本題測驗 IEEE 754 單精度浮點數格式(Single-Precision Floating-Point Format) 的標準轉換。
IEEE 754 單精度浮點數共佔 32 個位元(bits),其格式劃分如下:
- 符號位元(Sign bit, ):佔 1 bit。
- 正數為 ;負數為 。
- 指數欄位(Exponent, ):佔 8 bits。
- 採用偏差標記法(Biased Representation / Excess-127)。
- 若實際真實指數為 ,則欄位儲存值為 。
- 小數部分/尾數欄位(Fraction / Mantissa, ):佔 23 bits。
- 採用正規化表示式(Normalized form):。
- 最高位的整數部分「」為隱含位元(Hidden bit),不佔用欄位空間,欄位僅儲存小數點後面的 23 個位元。
解題方法
將十進位小數 轉換為 IEEE 754 單精度格式,依序經過以下步驟:
步驟一:將十進位數轉換為二進位表示式
- 整數部分:
- 小數部分:
- 合併:
步驟二:正規化為科學記號(Normalized Scientific Notation)
將二進位小數點向左平移 1 位,使其符合 的格式:
由此可得:
- 符號為正數,故真實指數 。
- 小數部分 。
步驟三:決定三個欄位的位元值
- 符號位元():
- 數值為正數,故:
- 數值為正數,故:
- 指數欄位():
- 真實指數 ,加上 Bias(127):
- 將 128 轉成 8 位元二進位:
- 真實指數 ,加上 Bias(127):
- 尾數欄位():
- 取正規化小數點後的位元,不足 23 位元者在右側補 0:
- 取正規化小數點後的位元,不足 23 位元者在右側補 0: