1. 程式人生 > >計算機系統結構--複習(Part 4)

計算機系統結構--複習(Part 4)

本篇是習題專輯

往期回顧:

Part 1(chapter 1 - chapter 5):https://blog.csdn.net/zongza/article/details/83780572

Part 2(chapter 5 - chapter 10):https://blog.csdn.net/zongza/article/details/83933327

Part 3(概念專輯):https://blog.csdn.net/zongza/article/details/84100133

Part 4(習題專輯):https://blog.csdn.net/zongza/article/details/84111578

資料下載:

計算機體系結構-量化研究方法-Hennessy&Patterson著(英文版):https://download.csdn.net/download/zongza/10787837

計算機體系結構-量化研究方法-Hennessy&Patterson著(中文版):https://download.csdn.net/download/zongza/10787840

計算機系統結構教程-第二版-張晨曦著:https://download.csdn.net/download/zongza/10787843

計算機體系結構教程-學習指導與題解:https://download.csdn.net/download/zongza/10793886

流水線

主要知識點:畫出停頓示意圖縱座標用任務),畫出流水線時空圖縱座標用流水段或者任務,視情況而定,如果重複執行相同指令就是流水段時空圖,如果執行多條不同指令就是任務時空圖),吞吐率 效率 加速比 的計算流水線改進(增加硬體,旁路等等)

例1:

假設非流水機單條指令經過相應的5個功能部件的執行時間分別為10ns,8ns,10ns,10ns7ns,如果實現流水線且每個部件增加了1ns的附加開銷,不考慮其他延遲因素,那麼該流水線的加速比為多少?

例2:

注意這個最大吞吐率的計算! 意思是流水線進入穩定狀態後,一定是每max(...)個時間流出一條指令。

 

例3:

主要考察流水線停頓

注意:

  1. 先分析相關(考察的就是相關帶來的stall)
  2. 任務時空圖是:向下的方向為縱軸 和 向左的方向為橫軸

 

例4:

主要考察動態流水線的時空圖

例5:

假設非流水線實現的時鐘週期時間為1ns,ALU和分支指令需要4個時鐘週期,訪問儲存器指令需5個時鐘週期,上述指令在程式中出現的相對頻率分別是:40%、20%和40%。在基本的流水線中,假設由於時鐘扭曲和暫存器建立延遲等原因,流水線要在其時鐘週期時間上附加0.2ns的額外開銷。現忽略任何其他延遲因素的影響,請問:相對於非流水實現而言,基本的流水線執行指令的加速比是多少?

例6:

用一條4段浮點加法器流水線求8個浮點數的和: Z=A+B+C+D+E+F+G+H,求流水線的吞吐率、加速比和效率,其中△t1=△t2=△t3=△t4=△t。

答:可對原式作一簡單變化,得到:

   Z=[(A+B)+(C+D)]+[(E+F)+(G+H)]

7個加法8個數的流水線時空圖如下:

 

CPI計算

主要知識點:CPI計算,MIPS計算,程式執行時間

例1:

 

例2:

新CPI的計算 old-

 

例3:

例4:

新CPI的計算 base+

 

例5:

例6:

某RISC處理機各類指令使用頻率和理想CPI(指令和資料訪問Cache命中率為100%時的CPI)如下表所示。而實際測得的指令訪問Cache缺失率(miss rate)為5%,資料訪問的Cache缺失率為10%,Cache的缺失損失(miss penalty)為40個時鐘週期。

1)該機器在無Cache缺失(理想情況)時的CPI是多少?(3分)

2)該機器在無Cache缺失(理想情況)時的速度比有Cache缺失時快幾倍?(4分)

指令型別

ALU操作

Loads

Stores

Branches

使用頻率

43%

21%

12%

24%

CPI ideal

1

2

2

2

1)CPI=43%X1+21%X2+12%X2+24%X2=1.57

2)對指令講,指令Cache的訪問佔全部訪問的100%/(100%+21%+12%)=75%

對資料來講,資料Cache的訪問佔全部訪問的(21%+12%)/(100%+21%+12%)=25%

new_cpi=base+失效率X失效開銷

            =1.57+(75%X5%+25%X10%)X40=1.57+2.5=4.07

則:4.07/1.57=2.59=2.6      大約快2.6倍

 

阿姆達爾定律

例1:

例2:

例3:

指令集架構(從多地址的向下擴充套件)

例1:

某計算機的指令字長16位,設有單地址指令和兩地址指令兩類指令,若每個地址子段均為6位,且兩地址指令有A條,問單地址指令最多可以有多少?

答:

雙地址指令結構為:(4位操作碼)(6位地址碼)(6位地址碼)

單地址指令結構為:(10位操作碼)(6位地址碼)

因此,每少一條雙地址指令,則多2^6條單地址指令,

雙地址指令最多是2^(16-6-6)=2^4=16條 ,

所以單地址指令最多有(16-X)*2^6條。

 

例2:

若某機要求有:三地址指令4條,單地址指令192條,零地址指令16條。設指令字長為12位,每個地址碼長3位。問能否以擴充套件操作碼為其編碼?

答:能,如下:

例3:

若某機要求:三地址指令4條,單地址指令255條,零地址指令16條。設指令字長為12位.每個地址碼長為3位。問能否以擴充套件操作碼為其編碼?如果其中單地址指令為254條呢?說明其理由。

解:

(1)不能用擴充套件碼為其編碼。

指令字長12位,每個地址碼佔3位,三地址指令最多是2^(12-3-3-3)=8條, 現三地址指令需4條,

所以可有4條編碼作為擴充套件碼,而單地址指令最多為4×2^3×2^3=2^8=256條,現要求單地址指令255條,

所以可有一條編碼作擴充套件碼

因此零地址指令最多為1×2^3=8條

不滿足題目要求,故不可能以擴充套件碼為其編碼。

(2)若單地址指令254條,可以用擴充套件碼為其編碼。

依據(1)中推導,單地址指令中可用2條編碼作為擴充套件碼,零地址指令為2×2^3=16條,滿足題目要求

 

Cache平均訪問時間

例1:

答:

 

例2:

答:

CPU時間(也可以看成CPI的計算)

例1:

答:注意這裡不是求平均訪問時間,而是計算停頓開銷(=miss_rate * miss_pernalty)

頁表計算

例1:

一個有快表和慢表的頁式虛擬儲存器,最多有64個使用者,每個使用者最多要用1024個頁面,每頁4K位元組,主存容量8M位元組。

(1)寫出多使用者虛地址的格式,並標出各欄位的長度。

(2)寫出主存地址的格式,並標出各欄位的長度。

(3)快表的字長為多少位?分幾個欄位?各欄位的長度為多少位?

(4)慢表的容量是多少個儲存字?每個儲存字的長度為多少位?

答:

使用者號:64=26,虛頁號:1024=210,頁內地址:4K=212,主存頁數:8M/4K=211

(1)多使用者虛地址:

         使用者號(6位)+虛頁號(10位)+頁內地址(12位)   共28位

(2)主存地址:

         主存實頁號(11位)+頁內地址(12位)                共23位

(3)快表字長27位;分3個欄位:使用者號6位,虛頁號10位,實頁號11位

(4)慢表容量為2(6+10),每個儲存字長為:主存頁號+1=12位。

 

相關分支預測狀態機:

例1:

例2: