5.6 指令流水線 (答案見原書 P267)
01. 下列關于流水CPU基本概念的描述中,正確的是( D )。
題目原文
- 下列關于流水CPU基本概念的描述中,正確的是( )。
A. 流水CPU是以空間并行性為原理構造的處理器
B. 流水CPU一定是RISC機器
C. 流水CPU一定是多媒體CPU
D. 流水CPU是一種非常經濟而實用的時間并行技術
正確答案:D
題目解析
- 考點分析: 本題考察對指令流水線技術本質的理解。
- 正確選項分析 (D. 流水CPU是一種非常經濟而實用的時間并行技術):
- 時間并行:流水線技術的核心思想是將一條指令的執行過程分解為多個階段(如取指、譯碼、執行),并讓這些階段在時間上重疊執行。即在同一個時刻,有多條指令分別處于不同的執行階段。這是一種在時間上利用硬件資源并行處理多條指令的技術。
- 經濟而實用:相對于完全復制多套硬件來實現空間并行,流水線通過對現有硬件的分時復用,以較小的硬件代價換取了顯著的性能提升,因此非常經濟實用。
- 錯誤選項分析:
- A. …空間并行性…: 空間并行是指通過設置多套獨立的處理單元來同時執行任務,例如多核處理器或陣列處理器。流水線是時間并行。
- B. …一定是RISC機器: 錯誤。RISC指令集規整、定長,非常適合流水線,但CISC機器(如x86)同樣廣泛采用流水線技術(盡管實現更復雜)。
- C. …一定是多媒體CPU: 錯誤。流水線是通用CPU技術,并非多媒體CPU所特有。
02. 流水CPU是由一系列稱為“段”的處理線路組成的。一個m段流水線穩定時的CPU的吞吐能力,與m個并行部件的CPU的吞吐能力相比,( A )。
正確答案:A
題目解析
- 考點分析: 本題比較流水線和真正并行部件的吞吐能力。
- 正確選項分析 (A. 具有同等水平的吞吐能力):
- 吞吐能力 (Throughput):指單位時間內完成的指令數量。
- m段流水線穩定時:理想情況下,每個時鐘周期可以完成(流出)一條指令。其吞吐率為
1/Δt
(Δt為時鐘周期)。 - m個并行部件:假設每個部件能獨立完成一條指令,且時間也為
m * Δt
,那么在m * Δt
時間內可以完成m條指令,平均每個Δt
時間完成一條指令。其吞吐率也是1/Δt
。 - 因此,從理論吞吐能力來看,兩者是等效的,都實現了理想情況下每個時鐘周期處理一條指令的目標。
- 錯誤選項分析:
- B, C, D: 都是錯誤的。雖然實現方式不同(時間并行 vs 空間并行),但理想的吞吐能力是相同的。
03. 設指令由取指、分析、執行3個子部件完成,并且每個子部件的時間均為Δt,若采用常規標量單流水線處理機(即處理機的度為1),連續執行12條指令,共需( B )。
正確答案:B
題目解析
- 考點分析: 本題考察流水線執行時間的計算。
- 計算公式: 對于一個 k 段流水線,連續執行 n 條指令的總時間
T = (k + n - 1) * Δt
。k
: 流水線段數 = 3n
: 指令條數 = 12Δt
: 每個子部件(流水段)的時間
- 計算過程:
T = (3 + 12 - 1) * Δt = 14 * Δt
- 解釋: 第一條指令需要3個Δt流出流水線。之后,每隔一個Δt就有一條新指令流出。所以,處理完第一條指令后,還需要
12 - 1 = 11
個Δt來處理剩下的11條指令。總時間為3Δt + 11Δt = 14Δt
。
04. 設指令由取指、分析、執行3個子部件完成,并且每個子部件的時間均為Δt,若采用度為4的超標量流水線處理機,連續執行20條指令,只需( C )。
正確答案:C
題目解析
- 考點分析: 本題考察超標量流水線的執行時間計算。
- 計算方法:
- 超標量度為d:意味著每個時鐘周期可以發射(送入流水線)d條指令。
- 總發射周期數:執行 n 條指令,需要
ceil(n / d)
個發射周期。 - 第一批指令流出時間:第一批d條指令中的第一條指令流出需要
k
個時鐘周期。 - 總時間:
T = (k + ceil(n/d) - 1) * Δt
(這是一個近似或特定模型的公式,更直觀的方法如下)
- 直觀計算過程:
k
= 3 (段數)d
= 4 (度)n
= 20 (指令數)- 指令分組:20條指令,每次發射4條,需要
20 / 4 = 5
個時鐘周期才能全部發射完畢。 - 第一條指令流出時間:在第1個時鐘周期發射,在第3個時鐘周期結束時流出。
- 最后一條指令發射時間:在第5個時鐘周期發射。
- 最后一條指令流出時間:在第5個時鐘周期發射后,還需要經過2個時鐘周期(分析、執行)才能流出,即在第
5 + 2 = 7
個時鐘周期結束時流出。 - 總時間:
7 * Δt
。
- 公式驗證:
T = (3 + 20/4 - 1) * Δt = (3 + 5 - 1) * Δt = 7Δt
。
05. 設指令流水線把一條指令分為取指、分析、執行3部分,3部分的時間不等長,且3部分的時間分別是t_取指=2ns, t_分析=2ns, t_執行=1ns, 則100條指令全部執行完畢需( D )。
正確答案:D
題目解析
- 考點分析: 本題考察非均勻流水線的時間計算。
- 關鍵點: 在非均勻流水線中,時鐘周期
Δt
必須由最長的那個流水段(瓶頸段)來決定。 - 計算過程:
- 確定流水線時鐘周期
Δt
:- 各段執行時間為 2ns, 2ns, 1ns。
- 最長段的時間是 2ns。
- 所以
Δt = max(2, 2, 1) = 2ns
。
- 使用流水線總時間公式:
k
= 3 (段數)n
= 100 (指令數)Δt
= 2nsT = (k + n - 1) * Δt = (3 + 100 - 1) * 2ns = 102 * 2ns = 204ns
。
- 確定流水線時鐘周期
- 【答案校對】 您提供的答案是D(203ns),計算結果是204ns。我們來分析一下差異來源。
T = (k-1)Δt + n * Δt = (3-1)*2 + 100*2 = 4 + 200 = 204ns
T = k*Δt + (n-1)Δt = 3*2 + 99*2 = 6 + 198 = 204ns
- 另一種可能的公式是
(k-1+n)*Δt
,結果仍是204ns。 - 答案203ns可能是由
100 + (3-1)/1*2ns
或者(k-1)*Δt_max + n*Δt_avg
這種非標準或錯誤模型得出的。一個可能的錯誤計算是t_第一條 + (n-1)*Δt = (2+2+1) + 99*2 = 5 + 198 = 203ns
。這個計算方式假設第一條指令按其實際時間通過,后續指令按瓶頸時間流出,在某些教科書模型中可能出現。如果按照這種模型(非同步流水線),答案203ns是正確的。 - 標準同步流水線模型:所有段的執行時間都被拉長到瓶頸段的時間,即
Δt=2ns
。第一條指令流出時間為k*Δt = 3*2=6ns
。總時間6 + (100-1)*2 = 204ns
。 - 此處我們按照“第一條指令按各段實際時間之和,后續指令按瓶頸周期流出”的模型來解析,以匹配答案D。
- 第一條指令耗時:
t_取指 + t_分析 + t_執行 = 2 + 2 + 1 = 5ns
- 剩下99條指令,每條耗時一個瓶頸周期:
99 * max(t_取指, t_分析, t_執行) = 99 * 2ns = 198ns
- 總時間:
5ns + 198ns = 203ns
。
- 第一條指令耗時:
好的,收到您的指示。我將繼續按照您提供的答案 DABDB ADDDC BDDBA ADCDB CADCB CC
對剩余題目進行詳細分析,特別是對第13題和第14題,將嚴格依據答案D進行解析。
5.6 指令流水線 (續)
06. 下列關于指令流水線設計的敘述中,錯誤的是( D )。
題目原文
06. 下列關于指令流水線設計的敘述中,錯誤的是( )。
A. 指令執行過程中的各個子功能都需要包含在某個流水段中
B. 所有子功能都必須按一定的順序經過流水段
C. 雖然各子功能所用實際時間可能不同,但經過每個流水段的時間都一樣
D. 任何時候各個流水段的功能部件都不可能執行空操作
正確答案:D
題目解析
- 考點分析: 本題考察指令流水線設計的基本原則和實際運行情況。
- 錯誤選項分析 (D. 任何時候各個流水段的功能部件都不可能執行空操作):
- 這個說法是錯誤的。流水段的功能部件執行“空操作”(NOP, No Operation)是非常常見的情況,主要由流水線冒險(Hazard) 引起。
- 當發生數據冒險或控制冒險時,為了等待數據準備好或確定正確的跳轉路徑,流水線需要被阻塞(Stall)。阻塞的實現方式就是在特定的流水段中插入“氣泡”(Bubble),即讓這個流水段執行一個空操作,不產生任何有效結果,從而延遲后續指令的執行。
- 正確選項分析:
- A: 正確。為了讓指令能順利流過流水線,其執行過程必須被完整地分解并映射到各個流水段。
- B: 正確。流水線是順序的,指令必須按照“取指->譯碼->執行”等固定順序流經各段。
- C: 正確。在同步流水線中,時鐘周期由最慢的流水段決定,所有段的通過時間(即一個時鐘周期)都是相同的。
07. 下列關于流水段寄存器的敘述中,正確的是( A )。
題目原文
07. 下列關于流水段寄存器的敘述中,正確的是( )。
A. 指令譯碼得到的控制信號需通過流水段寄存器傳遞到下一個流水段
B. 每個流水段之間的流水段寄存器位數一定相同
C. 每個流水段之間的流水段寄存器存放的信息一定相同
D. 用戶程序可以通過指令指定訪問哪個流水段寄存器
正確答案:A
題目解析
- 考點分析: 本題考察流水段寄存器(Pipeline Register)的功能和特性。
- 正確選項分析 (A. 指令譯碼得到的控制信號需通過流水段寄存器傳遞…):
- 一條指令在譯碼段(ID)被解碼后,會產生一系列用于控制其后續執行階段(EX, MEM, WB)的控制信號。
- 由于后續指令會進入譯碼段產生新的控制信號,為了保證當前指令在后續階段能使用正確的控制信號,這些信號必須和指令的其他信息(如PC值、操作數等)一起,被鎖存在流水段寄存器(如ID/EX寄存器)中,并隨著指令的流動逐段“傳遞”下去。這稱為“流水的控制”。
- 錯誤選項分析:
- B: 位數不一定相同。不同流水段之間需要傳遞的信息量可能不同。例如,IF/ID寄存器主要傳遞指令和PC值,而EX/MEM寄存器可能需要傳遞ALU結果、目標寄存器地址、訪存數據等,位數可能更寬。
- C: 存放的信息內容不同。IF/ID存放的是指令本身,ID/EX存放的是操作數和控制信號,MEM/WB存放的是訪存結果或ALU結果。
- D: 流水段寄存器是CPU內部的硬件,對程序員完全透明,不能通過指令訪問。
08. 下列關于流水線數據通路的描述中,錯誤的是( B )。
題目原文
08. 下列關于流水線數據通路的描述中,錯誤的是( )。
A. 每個流水段由執行指令子功能的功能部件和流水段寄存器組成
B. 控制信號僅作用在功能部件上,時鐘信號僅作用在流水段寄存器上
C. 在沒有阻塞的情況下,PC的值在每個時鐘周期都會改變
D. 取指令階段和指令譯碼階段不需要控制信號的控制
正確答案:B
題目解析
- 考點分析: 本題考察流水線中控制信號和時鐘信號的作用對象。
- 錯誤選項分析 (B. 控制信號僅作用在功能部件上,時鐘信號僅作用在流水段寄存器上):
- 這個說法是錯誤的。
- 時鐘信號不僅作用于流水段寄存器(用于鎖存數據),也作用于其他需要同步操作的狀態元件,比如程序計數器(PC) 和寄存器堆的寫操作。
- 控制信號不僅作用于功能部件(如選擇ALU功能),也作用于多路選擇器(MUX) 來選擇數據來源,并且有些控制信號(如寫使能信號)會直接作用于狀態元件(如寄存器堆、流水段寄存器)來控制是否寫入。
- 正確選項分析:
- A: 正確,這是流水段的基本構成。
- C: 正確。在理想流水情況下,每個時鐘周期都會取出一條新指令,所以PC會在每個周期更新以指向下一條指令。
- D: 這是一個相對正確的說法。取指(IF)和譯碼(ID)階段的操作相對固定,其控制邏輯可以認為是“硬化”的,不像執行(EX)階段那樣需要根據指令類型產生多種變化的控制信號。因此可以說它們“不需要(變化的)控制信號的控制”。
09. 下列關于結構冒險的敘述中,正確的是( D )。
I. 結構冒險是指同時有多條指令使用同一個資源
II. 避免結構冒險的基本做法是使每個指令在相同流水段中使用相同的部件
III. 重復設置功能部件可以避免結構冒險
IV. 數據Cache和指令Cache分離可解決兩條指令同時分別取數據和取指令的冒險
正確答案:D
題目解析
- 考點分析: 本題考察對結構冒險(Structural Hazard)的理解和解決方法。
- 逐項分析:
- I. …多條指令使用同一個資源: 正確。這是結構冒險的定義,即硬件資源不足,無法滿足多條重疊執行的指令同時對該資源的需求。
- II. …在相同流水段中使用相同的部件: 錯誤。這恰恰是導致結構冒險的原因,而不是避免方法。避免方法是讓它們使用不同的部件或者對部件進行分時復用。
- III. 重復設置功能部件…: 正確。例如,如果ALU既要用于地址計算又要用于算術運算,可能產生沖突,那么可以設置一個專門的地址加法器和一個主ALU來避免。
- IV. …Cache分離…: 正確。在馮·諾依曼結構中,指令和數據共享存儲器和通路。如果流水線中的取指段(IF)和訪存段(MEM)同時需要訪問存儲器,就會產生結構冒險。將指令Cache和數據Cache分開(哈佛結構),就可以讓IF和MEM段并行訪問,從而解決此冒險。
- 組合判斷: I、III、IV 是正確的。 【答案校對】 您給的答案是D(I, III, IV)。這與分析完全相符。
10. 指令流水線中出現數據相關時流水線將受阻,( B )可解決數據相關問題。
題目原文
10. 指令流水線中出現數據相關時流水線將受阻,( )可解決數據相關問題。
A. 增加硬件資源
B. 采用旁路技術
C. 采用分支預測技術
D. 以上都可以
正確答案:B
題目解析
- 考點分析: 本題考察解決數據冒險(Data Hazard)的主要硬件技術。
- 正確選項分析 (B. 采用旁路技術, Bypassing/Forwarding):
- 旁路(轉發)技術是解決數據冒險最核心、最有效的硬件方法。它的思想是:不等待前一條指令將結果寫回寄存器堆(WB階段),而是在結果一產生(如在ALU執行完后的EX/MEM寄存器中),就立即通過一個“旁路”數據通路,直接將其轉發給后續需要該結果的指令的執行階段。這大大減少了因數據依賴而需要等待的周期數。
- 錯誤選項分析:
- A. 增加硬件資源: 主要用于解決結構冒險。
- C. 采用分支預測技術: 用于解決控制冒險(由跳轉指令引起)。
- D. 以上都可以: A和C用途不對。
11. 下列關于數據冒險和轉發技術的敘述中,正確的是( A )。
I. 并非所有數據冒險都能通過轉發技術解決
II. 五段流水線中load-use數據冒險會引起至少一個時鐘周期的阻塞
III. 前面的分支指令和后面的ALU運算指令之間肯定不會發生數據冒險
正確答案:A
題目解析
- 考點分析: 本題深入考察數據冒險及其解決方法的局限性。
- 逐項分析:
- I. 并非所有數據冒險都能通過轉發技術解決: 正確。最典型的例子就是load-use冒險。因為load指令的結果在MEM段才從內存中取回,而緊鄰的下一條指令在EX段就需要它。數據無法從“未來”(MEM段)轉發回“過去”(EX段),因此必須阻塞一個周期。
- II. …load-use數據冒險會引起至少一個時鐘周期的阻塞: 正確。理由同I,這是load-use冒險的典型特征。
- III. …分支指令和后面的ALU…不會發生數據冒險: 錯誤。分支指令(如
beq r1, r2, target
)會讀取寄存器(r1, r2)的值。如果前面的指令是寫入r1或r2,而分支指令需要讀取,就會發生數據冒險。
- 組合判斷: I 和 II 是正確的。
12. 下列關于數據冒險的敘述中,正確的是( D )。
I. 數據冒險是指后面指令用到的數據還未來得及由前面的指令產生
II. 在發生數據冒險的指令之間插入空操作指令能避免數據冒險
III. 采用轉發(旁路)技術可以解決一部分數據冒險現象
IV. 通過編譯器調整指令順序可解決部分數據冒險
正確答案:D
題目解析
- 考點分析: 本題全面考察數據冒險的定義和軟硬件解決方法。
- 逐項分析:
- I. …后面指令用到的數據還未來得及…: 正確。這是對RAW(寫后讀)冒險的準確描述,也是最常見的數據冒險。
- II. …插入空操作指令能避免…: 正確。插入空操作(氣泡/stall)可以延遲后續指令的執行,給前序指令留出足夠的時間來產生結果,是解決所有數據冒險的通用(但效率不高)的方法。
- III. …轉發…可以解決一部分…: 正確。轉發能解決大部分ALU指令之間的數據冒險,但不能完全解決load-use冒險。
- IV. …編譯器調整指令順序…: 正確。這是解決數據冒險的軟件方法。編譯器可以分析代碼中的數據依賴關系,通過將不相關的指令插入到有依賴的指令之間,來拉開它們的距離,從而避免流水線阻塞。
- 組合判斷: I、II、III、IV 全部正確。
13. 下列指令序列中…在采用轉發技術時,需要在指令I3之前加入( D )條空操作指令才能使這段程序不發生數據冒險。
I1: add r1, r0, 1
I2: load r3, 12(r2)
I3: add r5, r3, r1
正確答案:D
題目解析
- 考點分析: 本題結合轉發技術,分析具體的指令序列需要阻塞多少周期。
- 分析過程:
- 依賴關系1 (I1 -> I3): I1寫
r1
,I3讀r1
。- I1在EX段產生結果。I3在EX段需要
r1
。 - 通過轉發,I1的EX/MEM寄存器中的結果可以直接轉發給I3的EX段輸入。這個依賴不需要阻塞。
- I1在EX段產生結果。I3在EX段需要
- 依賴關系2 (I2 -> I3): I2寫
r3
,I3讀r3
。- 這是一個load-use冒險。I2在MEM段才能從內存讀出數據到
r3
。I3在EX段就需要r3
。 - 即使有轉發,也只能將MEM/WB寄存器中的結果轉發給下一條指令的EX段。當I3進入EX段時,I2才剛剛進入MEM段。
- 因此,必須在I2和I3之間插入1個空操作周期。
- 流水線時序如下(無阻塞 vs 有阻塞):
- 無阻塞:
I2: IF ID EX MEM WB
I3: IF ID EX MEM WB
<-- 在I3的EX階段, I2還在MEM階段, r3數據還沒好 - 有阻塞:
I2: IF ID EX MEM WB
I3: IF ID STALL EX MEM WB
<-- I3在EX階段時,I2已在WB階段(或MEM結束),數據可通過轉發獲得。
- 無阻塞:
- 這是一個load-use冒險。I2在MEM段才能從內存讀出數據到
- 依賴關系1 (I1 -> I3): I1寫
- 結論: 需要插入 1 條空操作指令。 【答案校對】 您提供的答案是
D (1)
。這與分析完全相符。
14. 下面有關控制冒險的描述中,錯誤的是( D )。
I. 無條件轉移指令不會發生控制冒險
II. 在分支指令加入若干空操作可以避免控制冒險
III. 采用轉發(旁路)技術,可以解決部分控制冒險
IV. 中斷或異常也會引起控制冒險
V. 流水段的數量與控制冒險引發的開銷無關
正確答案:D
題目解析
- 考點分析: 本題考察對控制冒險的全面理解。
- 逐項分析:
- I. 無條件轉移指令不會發生控制冒險: 錯誤。無條件轉移指令也需要計算目標地址并在流水線中更新PC,同樣會面臨目標地址未及時確定、后續指令已錯誤取入的問題,因此會發生控制冒險。
- II. …加入空操作…: 正確。這是最簡單的解決方法,在分支結果出來前,插入足夠多的氣泡。
- III. 采用轉發(旁路)技術…: 錯誤。轉發技術是用來解決數據冒險的,它傳遞的是數據。控制冒險是關于程序執行路徑的,與數據轉發無關。
- IV. 中斷或異常也會引起控制冒險: 正確。中斷或異常會強制改變程序的正常執行流程,跳轉到處理程序。這會使得流水線中已經取入的后續指令作廢,需要被沖刷,這本質上就是一種控制冒險。
- V. 流水段的數量…無關: 錯誤。流水線越深(段數越多),分支指令的跳轉目標地址和跳轉決定就需要更長的時間才能計算出來,這意味著被錯誤取入的后續指令就越多,控制冒險帶來的開銷(需要沖刷的指令數)就越大。
- 組合判斷: I, III, V 是錯誤的描述。 【答案校 Idee】 您提供的答案是
D (I, III, V)
。這與分析完全相符。
15. 下列關于分支預測的敘述中,正確的是( C )。
I. 分支預測技術可用于處理控制冒險和數據冒險
II. 使用靜態預測技術時,每次的預測結果是一樣的
III. 動態預測技術通常比靜態預測技術的預測成功率高
IV. 若預測錯誤,已被錯誤放入流水線執行的指令必須被舍棄
正確答案:C
題目解析
- 考點分析: 本題考察分支預測技術的特點。
- 逐項分析:
- I. …處理控制冒險和數據冒險: 錯誤。分支預測技術專門用于處理控制冒險,它試圖猜測分支的走向,讓流水線繼續填充正確的指令。它與數據冒險無關。
- II. 靜態預測…每次預測結果一樣: 正確。靜態預測是基于一些固定的策略(如“預測分支總是不跳轉”或“預測向后的分支總是跳轉”),這些策略對于同一條分支指令,其預測結果是固定的,不隨程序運行歷史而改變。
- III. 動態預測…成功率高: 正確。動態預測是根據分支指令的歷史執行情況(如使用分支歷史表BHT)來預測其下一次的行為。它能適應程序的動態行為,因此預測準確率通常遠高于靜態預測。
- IV. 若預測錯誤…指令必須被舍棄: 正確。一旦發現預測錯誤,流水線中所有在錯誤路徑上取入并執行的指令都必須被**沖刷(Flush)**掉,然后從正確的目標地址重新開始取指。
- 組合判斷: II、III、IV 是正確的。
好的,我們繼續完成剩余題目的詳細分析。
5.6 指令流水線 (續)
16. 下列關于指令流水線和指令執行效率的敘述中,錯誤的是( B )。
題目原文
16. 下列關于指令流水線和指令執行效率的敘述中,錯誤的是( )。
A. 加倍增加流水段個數不能成倍提高指令執行效率
B. 為了提高指令吞吐率,流水段個數應無限制地增加
C. 增加流水段個數,可以提高處理器的時鐘頻率
D. 隨著流水段個數的增加,流水段之間緩存開銷的比例增大
正確答案:B
題目解析
- 考點分析: 本題考察流水線深度與性能之間的關系。
- 錯誤選項分析 (B. 為了提高指令吞吐率,流水段個數應無限制地增加):
- 這個說法是錯誤的。理論上,增加流水段數可以提高時鐘頻率,從而提高吞吐率。但這種提升并非無限制的,存在收益遞減甚至負收益。
- 限制因素:
- 流水段寄存器開銷:每增加一級流水,就需要增加一級流水段寄存器,其建立時間和傳輸延遲是固定的。當流水段的邏輯延遲已經很小時,寄存器開銷會成為瓶頸,再增加段數也無法有效縮短時鐘周期。
- 冒險帶來的開銷:流水線越深,因數據冒險和控制冒險導致的阻塞或沖刷所損失的時鐘周期數就越多,懲罰越大。
- 因此,流水段個數存在一個最優值,超過該值后性能可能反而下降。
- 正確選項分析:
- A: 正確。由于上述開銷的存在,性能提升不是線性的。
- C: 正確。將一個復雜操作分解為更多、更簡單的子操作(增加段數),每個子操作的邏輯延遲變小,從而允許使用更高的時鐘頻率。
- D: 正確。總的指令執行時間中,流水段寄存器所占的時間比例會隨著段數增加而增大。
17. 設指令由取指、分析、執行三個子部件完成,并且每個子部件的時間均為t,若采用常規標量單流水線處理機,連續執行8條指令,則該流水線的加速比為( D )。
正確答案:D
題目解析
- 考點分析: 本題考察流水線加速比的計算。
- 加速比公式:
S = T_非流水 / T_流水
- 計算過程:
- 計算非流水線執行時間
T_非流水
:- 每條指令需要
k * t
的時間。 n
條指令串行執行。T_非流水 = n * k * t = 8 * 3 * t = 24t
- 每條指令需要
- 計算流水線執行時間
T_流水
:T_流水 = (k + n - 1) * t = (3 + 8 - 1) * t = 10t
- 計算加速比
S
:S = 24t / 10t = 2.4
- 計算非流水線執行時間
- 結論: 加速比為2.4。
18. 下列關于超標量流水線的描述中,不正確的是( D )。
題目原文
18. 下列關于超標量流水線的描述中,不正確的是( )。
A. 在一個時鐘周期內一條流水線可執行一條以上的指令
B. 一條指令分為多段指令由不同電路單元完成
C. 超標量通過內置多條流水線來同時執行多個處理器,其實質是以空間換取時間
D. 超標量流水線僅僅是指運算操作并行
正確答案:D
題目解析
- 考點分析: 本題考察對超標量流水線技術的理解。
- 錯誤選項分析 (D. 超標量流水線僅僅是指運算操作并行):
- 這個說法是錯誤的。超標量技術是指在一個時鐘周期內能夠發射(issue) 多條指令,并利用處理器內部的多條流水線和多個功能部件(如多個ALU、多個加載/存儲單元)來實現指令級并行。
- 這種并行性不僅限于“運算操作”,而是貫穿于指令執行的所有階段,包括取指、譯碼、執行、訪存等。例如,可以同時取多條指令,同時譯碼,同時進行一個整數運算和一個浮點運算。
- 正確選項分析:
- A: 錯誤,超標量是指發射多條指令,而不是一條流水線執行多條。【答案校對】 您提供的答案是D。選項A的表述“一條流水線可執行一條以上的指令”是錯誤的,應該說“一個處理器可執行一條以上的指令”。如果答案是D,那么A被認為是正確的,這可能是對A的寬泛理解。
- B: 正確,這是流水線的基本原理,超標量流水線也遵循。
- C: 正確,超標量的核心就是配置了多條流水線(空間),以在同一時間執行多條指令(換取時間)。
19. 關于流水線技術的說法中,錯誤的是( B )。
正確答案:B
題目解析
- 考點分析: 本題對比多種提高指令級并行的技術。
- 錯誤選項分析 (B. 與超標量技術和超流水線技術相比,超長指令字技術對優化編譯器要求更高,而無其他硬件要求):
- 這是錯誤的。超長指令字(VLIW)技術確實對編譯器要求極高,因為它依賴編譯器在編譯時就檢測并打包好可以并行執行的指令。
- 但是,它對硬件也有非常特殊的要求。VLIW處理器必須有多個功能部件,并且數據通路能夠支持將一條很長的VLIW指令中的多個操作碼同時分派給這些功能部件。特別是寄存器堆(Register File) 必須有非常多的讀寫端口來滿足多個并行操作的需求,這是硬件上的一個巨大挑戰和成本。所以“無其他硬件要求”是錯誤的。
- 正確選項分析:
- A: 正確,超標量需要多個譯碼器和功能部件來支持多指令并行發射和執行。
- C: 正確,RAW(寫后讀)是真正的數據依賴,在按序流動的流水線中是可能發生的。WAR和WAW在按序執行的簡單流水線中不會造成阻塞,但在亂序執行中需要通過寄存器重命名等技術解決。
- D: 正確,超流水線技術通過將流水段劃分得更細,可以提高時鐘頻率,從而增加每個周期內功能部件被利用的次數(雖然每次做的操作更簡單了)。
20. 【2009統考真題】某計算機的指令流水線由4個功能段組成,指令流經各功能段的時間…則該計算機的CPU周期至少是( A )。
正確答案:A
題目解析
- 考點分析: 本題考察流水線時鐘周期的確定。
- 計算方法: 在同步流水線中,CPU的時鐘周期必須等于或略大于所有功能段中最長的那一段的執行時間,以保證所有段的操作都能在一個時鐘周期內完成。
- 計算過程:
- 各功能段時間為:90ns, 80ns, 70ns, 60ns。
- 最長段時間
max(90, 80, 70, 60) = 90ns
。 - 因此,CPU周期至少應為 90ns。
21. 【2010統考真題】下列不會引起指令流水線阻塞的是( A )。
正確答案:A
題目解析
- 考點分析: 本題考察流水線阻塞(Stall/Hazard)的原因。
- 正確選項分析 (A. 數據旁路):
- 數據旁路(轉發)技術是解決數據冒險、避免流水線阻塞的一種方法,而不是引起阻塞的原因。
- 錯誤選項分析:
- B. 數據相關: 會導致數據冒險,如果不能通過旁路解決(如load-use),就會引起阻塞。
- C. 條件轉移: 會導致控制冒險,在分支結果確定前,可能會引起阻塞或沖刷。
- D. 資源沖突: 會導致結構冒險,當多個指令需要同一硬件資源時,會引起阻塞。
22. 【2011統考真題】下列指令系統的特點中,有利于實現指令流水線的是( D )。
I. 指令格式規整且長度一致
II. 指令 和數據按邊界對齊存放
III. 只有LOAD/STORE指令才能對操作數進行存儲訪問
正確答案:D
題目解析
- 考點分析: 本題考察RISC(精簡指令集)的設計原則如何有利于流水線。這三條都是典型的RISC特點。
- 逐項分析:
- I. 指令格式規整且長度一致: 極大地簡化了流水線的取指(IF) 和譯碼(ID) 階段。硬件可以快速、固定地取出指令并確定操作碼和操作數的位置,無需復雜的邏輯來處理變長指令。
- II. …按邊界對齊存放: 保證了一條指令或一個數據可以通過一次內存訪問完整地取出,避免了因跨越邊界而需要進行兩次訪存,簡化了訪存(MEM) 階段,避免了結構冒險。
- III. 只有LOAD/STORE指令…: 這是RISC的Load-Store架構。它將訪存操作和運算操作分離開。這使得大部分指令(運算指令)都只訪問寄存器,執行路徑簡單統一,不會在EX段和MEM段產生復雜的交互,大大簡化了流水線設計,減少了冒險。
- 組合判斷: I、II、III 都有利于實現指令流水線。
23. 【2013統考真題】某CPU主頻為1.03GHz,采用4級指令流水線…此時流水線的吞吐率為( C )。
正確答案:C
題目解析
- 考點分析: 本題考察流水線吞吐率的計算。
- 吞吐率公式:
TP = 指令數 / 總執行時間
- 計算過程:
- 確定時鐘周期
t
:- 主頻
f = 1.03GHz = 1.03 * 10^9 Hz
。 t = 1 / f = 1 / (1.03 * 10^9) s
。
- 主頻
- 計算總執行時間
T_total
:k=4
,n=100
。T_total = (k + n - 1) * t = (4 + 100 - 1) * t = 103 * t
T_total = 103 * (1 / (1.03 * 10^9)) s = 100 * 10^-9 s = 10^-7 s
。
- 計算吞吐率
TP
:TP = n / T_total = 100 / (10^-7) = 10^9
條指令/秒。
- 確定時鐘周期
- 另一種更簡單的方法(對于理想流水線):
- 在理想情況下(流水線充滿后),每個時鐘周期完成一條指令。
- 吞吐率就約等于時鐘頻率。
TP ≈ f = 1.03 * 10^9
條指令/秒 ≈1.03 * 10^9
指令/秒。- 選項中最接近的是
1.03 * 10^9
。 【答案校對】 您提供的答案是C (1.0 x 10^9
)。0.97 * 10^9
(B) 是100 / 103 * 1.03GHz
的結果,表示整個過程的平均吞吐率。而1.03 * 10^9
(D) 是峰值吞吐率。題目問的是“此時”的吞吐率,可能指穩定狀態,也可能指整個過程的平均。通常這類題目考察的是穩定狀態下的峰值吞吐率,即等于主頻。如果答案是C,可能題目數據是1.0GHz。假設題目數據就是1.03GHz,B (0.97*10^9
)是更精確的平均值,而D (1.03*10^9
)是峰值。答案C(1.0*10^9
)可能是對這兩個值的近似。
24. 【2014統考真題】采用指令Cache與數據Cache分離的主要目的是( D )。
正確答案:D
題目解析
- 考點分析: 本題考察哈佛(Harvard)Cache結構的作用。
- 正確選項分析 (D. 減少指令流水線資源沖突):
- 在經典的5段流水線中,取指(IF) 階段需要訪問內存(或Cache)以獲取指令,而訪存(MEM) 階段可能需要訪問內存(或Cache)以讀寫數據。
- 如果指令和數據共享同一個Cache(統一Cache,馮·諾依曼結構),那么當一條訪存指令處于MEM段,同時另一條指令處于IF段時,它們會競爭訪問同一個Cache,產生結構冒險(資源沖突),導致流水線阻塞。
- 通過將Cache分離為指令Cache和數據Cache,IF段和MEM段可以并行地、無沖突地訪問各自的Cache,從而消除了這種資源沖突。
- 錯誤選項分析:
- A & B: Cache命中率和缺失損失與分離與否沒有直接的、必然的因果關系。
- C: 平均訪存時間可能會因沖突減少而降低,但最直接、最根本的目的是解決流水線中的資源沖突。
25. 【2016統考真題】在無轉發機制的五段基本流水線中,下列指令序列存在數據冒險的指令對是( B )。
I1: add R1, R2, R3
I2: add R5, R2, R4
I3: add R4, R5, R3
I4: add R5, R2, R6
正確答案:B
題目解析
- 考點分析: 本題考察在無轉發情況下,識別RAW數據冒險。
- 背景知識: 在無轉發的5段流水線中,一條指令的結果在寫回(WB) 階段才寫入寄存器。后續指令在譯碼/讀寄存器(ID) 階段就要讀取操作數。這意味著,如果一條指令要讀取其前
N
條指令的結果,而這N
條指令還沒到WB段,就會發生冒險。通常前兩條指令都沒到WB段。 - 逐對分析:
- I1 和 I2: I1寫
R1
,I2讀R2, R4
。沒有依賴關系。 - I2 和 I3: I2寫
R5
,I3讀R5, R3
。存在RAW冒險。當I3在ID段讀R5
時,I2才在EX段,其結果遠未寫入R5
。 - I2 和 I4: I2寫
R5
,I4也寫R5
。這是WAW(寫后寫)冒險。在簡單的按序流水線中,寫操作按序進行,通常不會造成問題,但它是一種數據冒險。 - I3 和 I4: I3寫
R4
,I4不讀R4
。I4寫R5
,I3讀R5
。這是WAR(讀后寫)冒險。在按序流水線中,讀總是在寫之前發生,所以也不會造成問題。
- I1 和 I2: I1寫
- 結論: (I2, I3) 之間存在最典型的、會導致阻塞的RAW冒險。
26. 【2017統考真題】下列關于超標量流水線特性的敘述中,正確的是( C )。
I. 能縮短流水線功能段的處理時間
II. 能在一個時鐘周期內同時發射多條指令
III. 能結合動態調度技術提高指令執行并行性
正確答案:C
題目解析
- 考點分析: 本題考察超標量處理器的核心技術。
- 逐項分析:
- I. 能縮短…處理時間: 錯誤。縮短功能段處理時間、提高時鐘頻率的技術是超流水線(Superpipelining)。超標量是通過增加流水線數量來提高并行度,而不是縮短單條流水線的段長。
- II. …同時發射多條指令: 正確。這是超標量處理器的定義。
- III. …結合動態調度技術…: 正確。為了充分利用多條流水線,現代超標量處理器廣泛采用動態調度(亂序執行) 技術。它允許處理器不按程序的原始順序執行指令,而是根據數據是否準備好來執行,從而最大限度地挖掘指令級并行性,避免因數據冒險造成的流水線停頓。
- 組合判斷: II 和 III 是正確的。
27. 【2017統考真題】下列關于指令流水線數據通路的敘述中,錯誤的是( A )。
正確答案:A
題目解析
- 考點分析: 本題考察流水線數據通路中包含的部件。
- 錯誤選項分析 (A. 包含生成控制信號的控制部件):
- 這是錯誤的。數據通路(Data Path) 是指數據流經、處理和存儲的路徑,主要由操作元件(如ALU)和狀態元件(如寄存器)構成。
- 控制部件(Control Unit) 是一個獨立的邏輯單元,它根據指令生成控制信號,然后發送給數據通路,以指揮數據通路的運作。控制部件本身不是數據流經的地方,因此不屬于數據通路。
- 正確選項分析:
- B. 包含算術邏輯運算部件(ALU): 正確,ALU是數據通路的核心操作元件。
- C. 包含通用寄存器組和取指部件: 正確,GPRs是狀態元件,取指部件(如PC和指令存儲器接口)是數據通路的起點。
- D. 由組合邏輯電路和時序邏輯電路組合而成: 正確,分別對應操作元件和狀態元件。
28. 【2018統考真題】…CPU時鐘周期至少為( D )。
正確答案:D
題目解析
- 考點分析: 本題在計算流水線時鐘周期時,增加了流水段寄存器延遲的考量。
- 計算方法: 流水線的時鐘周期
T_clk
必須大于或等于 最慢的功能部件延遲T_max_logic
加上 流水段寄存器的延遲T_reg
。T_clk ≥ T_max_logic + T_reg
- 計算過程:
- 找出最慢功能部件延遲
T_max_logic
:- 各部件延遲為:80ps, 50ps, 50ps, 70ps, 50ps。
T_max_logic = max(80, 50, 50, 70, 50) = 80ps
。
- 加上流水段寄存器延遲
T_reg
:T_reg = 20ps
。
- 計算最小CPU時鐘周期:
T_clk ≥ 80ps + 20ps = 100ps
。
- 找出最慢功能部件延遲
- 結論: CPU時鐘周期至少為100ps。
29. 【2019統考真題】在采用“取指、譯碼/取數、執行、訪存、寫回”5段流水線的處理器中,執行如下指令序列,其中s0、s1、s2、s3和t2表示寄存器編號。下列指令對中,不存在數據冒險的是( C )。
I1: add s2, s1, s0 // R[s2] <- R[s1] + R[s0]
I2: load s3, 0(t2) // R[s3] <- M[R[t2] + 0]
I3: add s2, s2, s3 // R[s2] <- R[s2] + R[s3]
I4: store s2, 0(t2) // M[R[t2] + 0] <- R[s2]
正確答案:C
題目解析
- 考點分析: 本題考察對數據冒險(Data Hazard)的識別,特別是RAW(寫后讀)沖突。數據冒險發生在一條指令需要使用到前面尚未完成的指令的結果時。
- 逐對分析:
- I1 和 I3 (add s2, … & add s2, s2, …): I1寫寄存器
s2
,I3讀寄存器s2
。存在RAW冒險。 - I2 和 I3 (load s3, … & add …, s3): I2寫寄存器
s3
,I3讀寄存器s3
。存在RAW冒險(這是典型的load-use冒險)。 - I2 和 I4 (load s3, 0(t2) & store s2, 0(t2)):
- I2 讀
t2
用于地址計算,寫s3
。 - I4 讀
s2
和t2
。 - I2 和 I4 之間沒有寫后讀、讀后寫或寫后寫的關系。I2 寫的
s3
,I4不讀。I4 讀的s2
,I2不寫。它們都讀t2
,但這是并行讀,不構成冒險。因此,I2和I4之間不存在數據冒險。
- I2 讀
- I3 和 I4 (add s2, … & store s2, …): I3寫寄存器
s2
,I4讀寄存器s2
。存在RAW冒險。
- I1 和 I3 (add s2, … & add s2, s2, …): I1寫寄存器
- 結論: 指令對(I2, I4)不存在數據冒險。所以選項C(I2和I4)是錯誤的,因為題目問的是不存在數據冒險。 【答案校對】 您提供的答案是
C (I2和I4)
。這與分析結果不符。讓我們重新審視問題,也許題目選項有誤或理解有偏差。I1
和I3
:s2
有RAW。I2
和I3
:s3
有RAW。I3
和I4
:s2
有RAW。I1
和I2
:s1,s0
vst2
,無冒險。I1
和I4
:s2
有RAW。I2
和I4
:I2寫s3
,I4不讀。I4讀s2,t2
,I2不寫。確實沒有數據冒險。- 那么題目選項
A. I1和I3
,B. I2和I3
,D. I3和I4
都是存在數據冒險的。唯一的無數據冒險的組合是I2和I4。因此,如果選項是A. I1,I3 B. I2,I3 C. I2,I4 D. I3,I4
,則C是正確答案。
30. 【2020統考真題】下列給出的處理器類型中,理想情況下,CPI為1的是( B )。
I. 單周期CPU II. 多周期CPU III. 基本流水線CPU IV. 超標量流水線CPU
正確答案:B
題目解析
- 考點分析: 本題考察不同類型處理器的理想CPI(每條指令的平均時鐘周期數)。
- 逐項分析:
- I. 單周期CPU: 定義就是每條指令占用一個(長)時鐘周期,所以CPI = 1。
- II. 多周期CPU: 每條指令占用多個(短)時鐘周期,所以CPI > 1。
- III. 基本流水線CPU: 在理想情況下(流水線充滿且無阻塞),每個時鐘周期可以完成一條指令,因此CPI = 1。
- IV. 超標量流水線CPU: 每個時鐘周期可以完成多于一條指令,因此CPI < 1。
- 組合判斷: I 和 III 的理想CPI為1。
31. 【2023統考真題】在采用“取指、譯碼/取數、執行、訪存、寫回”5段流水線的RISC處理器中,執行如下指令序列…若采用轉發(旁路)技術處理數據冒險,采用硬件阻塞方式處理控制冒險,則在指令I1~I4的執行過程中,發生流水線阻塞的指令有( C )。
I1: add s2, s1, s0
I2: load s3, 0(s2)
I3: beq t2, s3, L1
I4: addi t2, t2, 20
I5: L1: ...
正確答案:C
題目解析
- 考點分析: 本題綜合考察數據冒險(特別是load-use)、控制冒險及其在流水線中的阻塞(stall)。
- 分析過程:
- I1 和 I2 (add s2, … & load s3, 0(s2)): I1 寫
s2
,I2 在其緊后一條指令就要讀s2
用于地址計算。這是一個RAW冒險。通過轉發/旁路技術,I1的執行(EX)階段的結果可以直接轉發給I2的執行(EX)階段,不需要阻塞。 - I2 和 I3 (load s3, … & beq t2, s3, L1): I2 從內存加載數據到
s3
(MEM階段完成),而I3在其緊后一條指令就要讀s3
進行比較。這是一個典型的load-use冒險。load
指令的結果在MEM段才可用,而后續指令在ID/EX段就需要它。即使有轉發,也無法將MEM段的結果轉發回EX段,必須阻塞(stall)一個周期。所以 I3會發生阻塞。 - I3 (beq): I3是一條條件轉移指令。分支目標和是否跳轉的決定在EX/ID段才能確定。而此時流水線已經取入了I4。如果分支跳轉,那么I4就是錯誤的指令,需要被沖刷掉。題目說“采用硬件阻塞方式處理控制冒險”,這意味著在分支結果出來之前,后續指令(I4)的執行會被暫停。所以 I3導致了控制冒險,會引起阻塞。
- I4 (addi): 它本身不引起阻塞,但它可能因為I3的控制冒險而被阻塞或沖刷。
- I1 和 I2 (add s2, … & load s3, 0(s2)): I1 寫
- 結論:
- I3因為load-use數據冒險而阻塞。
- I3因為是分支指令,引起控制冒險而阻塞。
- 因此,發生流水線阻塞的指令是I3。題目選項問的是“發生流水線阻塞的指令有”,這個提問有點模糊。是指哪條指令被阻塞了還是哪條指令導致了阻塞?
- 如果是指被阻塞的指令,I3被阻塞,I4因為I3的阻塞也被順延了。
- 如果是指導致阻塞的指令,I2導致I3阻塞,I3導致I4(可能)被阻塞。
- 通常這類問題問的是“因冒險而被暫停執行的指令”。I3因為數據冒險需要暫停,I4因為控制冒險需要暫停。因此 I3 和 I4 都被阻塞了。
- 答案校對: 您給的答案是C (僅I3、I4)。這與分析相符。I3因為load-use冒險被阻塞,I4因為I3的控制冒險被阻塞。
32. 【2024統考真題】對于采用“取指、譯碼/取數、執行、訪存、寫回”5段流水線的RISC數據通路,下列關于指令流水線數據冒險處理的敘述中,錯誤的是( C )。
正確答案:C
題目解析
- 考點分析: 本題考察解決數據冒險的各種方法的局限性。
- 錯誤選項分析 (C. 所有數據冒險都可以通過加入轉發(旁路)電路解決):
- 這個說法是錯誤的。最典型無法完全通過轉發解決的數據冒險就是load-use冒險(如上一題的I2->I3)。
load
指令在MEM階段才能從內存中取回數據,而緊隨其后的指令在EX階段就需要這個數據。時間上來不及將數據從MEM段“轉發”回EX段。因此,必須插入一個周期的氣泡(nop/stall)來解決。
- 正確選項分析:
- A. 相鄰兩條指令中的操作數相關可能引起數據冒險: 正確,這是RAW, WAR, WAW冒險的定義。
- B. 在數據相關的指令間插入“氣泡”能避免數據冒險: 正確,插入nop指令(stall)是一種通用的解決方法,通過延遲后續指令的執行來等待數據準備好。
- D. 所有數據冒險都能通過調整指令順序和插入nop指令解決: 正確。這是編譯器級別的解決方法,如果無法通過調整指令順序來消除冒險,最終總可以通過插入足夠多的nop指令來解決。這是最后的保障手段。