計算機組織與系統結構第七章習題答案_第1頁
計算機組織與系統結構第七章習題答案_第2頁
計算機組織與系統結構第七章習題答案_第3頁
計算機組織與系統結構第七章習題答案_第4頁
計算機組織與系統結構第七章習題答案_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、習題1 給出以下概念的解釋說明。指令流水線(Instruction pipelining)流水線深度(Pipeline Depth)指令吞吐量(Instruction throughput)流水線冒險(Hazard)結構冒險(Structural hazard)控制冒險(Control hazard)數據冒險(Data hazard)流水線阻塞(Pipeline stall)氣泡(Bubble)空操作(nop)分支條件滿足(Branch taken)分支預測(Branch predict)靜態分支預測(Static predict)動態分支預測(Dynamic predict)延遲分支(Del

2、ayed branch) 分支延遲槽(Delayed branch slot)轉發(Forwarding)旁路(Bypassing)流水段寄存器(Pipeline register)IPC(Instructions Per Cycle)靜態多發射(Static multiple issue)動態多發射(Dynamic multiple issue)超流水線(Superpipelining)超長指令字VLIW超標量流水線(Superscalar)動態流水線(Dynamic pipelining)指令預取(Instruction prefetch)指令分發(Instruction dispatch

3、)按序發射(in-order issue)無序發射(out-of-order issue)存儲站(Reservation station)重排序緩沖(Reorder buffer)指令提交單元(Instruction commit unit)亂序執行(out-of-order execution)按序完成(in-order completion)無序完成(out-of-order completion)2. 簡單回答下列問題。 (1)流水線方式下,一條指令的執行時間縮短了還是加長了?程序的執行時間縮短了還是加長了?為什么? (2)具有什么特征的指令集易于實現指令流水線?(3)流水線處理器中時鐘

4、周期如何確定?單條流水線處理器的CPI為多少?每個時鐘周期一定有一條指令完成嗎?為什么?(4)流水線處理器的控制器實現方式更類似于單周期控制器還是多周期控制器?(5)為什么要在各流水段之間加寄存器?各流水段寄存器的寬度是否都一樣?為什么?(6)你能列出哪幾種流水線被阻塞的情況?你知道硬件和軟件是如何處理它們的嗎?(7)超流水線和多發射流水線的主要區別是什么?(8)靜態多發射流水線和動態多發射流水線的主要區別是什么?(9)為什么說Pentium 4是“CISC殼、RISC核”的體系結構?3. 假定在一個五級流水線(如圖7.5所示)處理器中,各主要功能單元的操作時間為:存儲單元:200ps;ALU

5、和加法器:150ps;寄存器堆讀口或寫口:50ps。請問:(1)若執行階段EX所用的ALU操作時間縮短20%,則能否加快流水線執行速度?如果能的話,能加快多少?如果不能的話,為什么?(2)若ALU操作時間增加20%,對流水線的性能有何影響?(3)若ALU操作時間增加40%,對流水線的性能有何影響?參考答案:a. ALU操作時間縮短20%不能加快流水線指令速度。因為存儲單元的時間為200ps,所以流水線的時鐘周期不會因為ALU操作時間的縮短而變短。b. ALU操作時間延長20%時,變為180ps,比200ps小,對流水線性能沒有影響;c. ALU操作時間延長40%時,變為210ps,比200ps

6、大,所以,流水線的時鐘周期將變為210,其效率降低了(210-200)/200=5%。4. 假定某計算機工程師想設計一個新CPU,一個典型程序的核心模塊有一百萬條指令,每條指令執行時間為100ps。請問:(1)在非流水線處理器上執行該程序需要花多長時間?(2)若新CPU是一個20級流水線處理器,執行上述同樣的程序,理想情況下,它比非流水線處理器快多少?(3)實際流水線并不是理想的,流水段間數據傳送會有額外開銷。這些開銷是否會影響指令執行時間(Instruction latency)和指令吞吐率(Instruction throughput)?參考答案:(1)非流水線處理器上執行該程序的時間為:

7、100ps x 106=100µs.(2)若在一個20級流水線的處理器上執行,理想情況下,每個時鐘周期為:100/20=5ps,所以,程序執行時間約為5 x 106=5µs. 快100/5=20倍。(3)流水線段之間數據的傳遞產生的額外開銷,使得一條指令的執行時間被延長,即影響 Instruction latency;同時也拉長了每個流水段的執行時間,即影響 Instruction throughput。還有什么不理想的因素?時鐘周期不會是5us可能發生阻塞等5. 假定最復雜的一條指令所用的組合邏輯分成6塊,依次為AF,其延遲分別為80ps、30ps、60ps、50ps、7

8、0ps、10ps。在這些組合邏輯塊之間插入必要的流水段寄存器就可實現相應的指令流水線,寄存器延遲為20ps。理想情況下,以下各種方式所得到的時鐘周期、指令吞吐率和指令執行時間各是多少?應該在哪里插入流水線寄存器? (1)插入一個流水段寄存器,得到一個兩級流水線 (2)插入兩個流水段寄存器,得到一個三級流水線(3)插入三個流水段寄存器,得到一個四級流水線 (4)吞吐量最大的流水線參考答案: (1)兩級流水線的平衡點在C和D之間,其前面一個流水段的組合邏輯延時為80+30+60=170ps,后面一個流水段的組合邏輯延時為50+70+10=130ps。這樣每個流水段都以最長延時調整為170+20=1

9、90ps,故時鐘周期為190ps,指令吞吐率為1/190ps=5.26GOPS,每條指令的執行時間為2x190=380ps。(2)兩個流水段寄存器分別插在B和C、D和E之間,這樣第一個流水段的組合邏輯延時為80+30=110ps,中間第二段的時延為60+50=110ps,最后一個段延時為70+10=80ps。這樣每個流水段都以最長延時調整為110+20=130ps,故時鐘周期為130ps,指令吞吐率為1/130ps=7.69GOPS,每條指令的執行時間為3x130=390ps。(3)三個流水段寄存器分別插在A和B、C和D、D和E之間,這樣第一個流水段的組合邏輯延時為80ps,第二段時延為30+

10、60=90ps,第三段時延為50ps,最后一段延時為70+10=80ps。這樣每個流水段都以最長延時調整為90+20=110ps,故時鐘周期為110ps,指令吞吐率為1/110ps=9.09GOPS,每條指令的執行時間為4x110=440ps。(4)因為所有組合邏輯塊中最長延時為80ps,所以,達到最大可能吞吐率的劃分應該是以一個流水段延時為80ps+20ps來進行,因此,至少按五段來劃分,分別把流水段寄存器插在A和B、B和C、C和D、D和E之間,這樣第一段的組合邏輯延時為80ps,第二段為30ps,第三段為60ps,第四段為50ps,最后一段為70+10=80ps。這樣每個流水段都以最長延時

11、調整為80+20=100ps,故時鐘周期為100ps,指令吞吐率為1/100ps=10GOPS,每條指令的執行時間為5x100=500ps。吞吐率的提高,單條指令執行時間的延長6. 以下指令序列中,哪些指令對發生數據相關?假定采用“取指、譯碼/取數、執行、訪存、寫回”五段流水線方式,那么不用“轉發”技術的話,需要在發生數據相關的指令前加入幾條nop指令才能使這段程序避免數據冒險?如果采用“轉發”是否可以完全解決數據冒險?不行的話,需要在發生數據相關的指令前加入幾條nop指令才能使這段程序不發生數據冒險? add $s3, $s1, $s0sub $t2, $s0, $s3lw $t1, 0($

12、t2)add $t1, $t1, $t2參考答案:發生數據相關的有:第1和2間關于$s3、第2和3間關于$t2、第2和4間關于$t2、第3和4間關于$t1。不進行“轉發”處理的話,需要分別在第2、3、4條指令前加三條nop指令才能避免數據冒險。而通過“轉發”可以避免1和2、2和3、2和4間的數據相關;但第3和4間是load-use數據相關,所以無法用“轉發”消除冒險,因此,需在第4條指令前加入一條nop指令。寄存器寫口和寄存器讀口分別安排在一個時鐘周期的前、后半個周期內獨立工作呢?2、3、4條之前分別插入2條nop就可以7. 假定以下MIPS指令序列在圖7.18所示的流水線數據通路中執行:ad

13、du $s3, $s1, $s0subu $t2, $s0, $s3lw $t1, 0($t2)add $t3, $t1, $t2add $t1, $s4, $s5請問:(1)上述指令序列中,哪些指令的哪個寄存器需要轉發,轉發到何處?(2)上述指令序列中,是否存在load-use數據冒險?(3)第5周期結束時,各指令執行狀態是什么?哪些寄存器的數據正被讀出?哪些寄存器將被寫入? 參考答案:(1)發生數據相關的有:第1和2間關于$s3、第2和3間關于$t2、第2和4間關于$t2、第3和4間關于$t1。通過“轉發”可以避免1和2、2和3、2和4間的數據相關;(2)第3和4間是load-use數據相

14、關,所以無法用“轉發”消除冒險。(3)第五個時鐘內各條指令的執行情況如下:指令1在“WB”階段,控制信息等在MEM/WB.Reg中,$s3正在被寫,結束時寫完指令2在“MEM”階段,控制信息等在EX/MEM.Reg中。sub指令在該階段進行的是空操作;在轉發檢測單元中,因為流水段寄存器Ex/Mem中的目的寄存器RegRd為$t2,流水段寄存器ID/Ex中的源寄存器Rs也為$t2,同時,流水段寄存器Ex/Mem中的RegWr控制信號為1,所以檢測到轉發條件滿足,因而,此時,sub指令在上一個時鐘周期中的執行結果(在流水段寄存器Ex/Mem中的ALU輸出結果)正被回送到ALU的輸入端;結束時轉發完

15、成指令3在“EXE”階段,ALU正在執行“add”操作,進行地址運算,ALU輸出結果將被寫入流水段寄存器Ex/Mem中;結束時運算完成。控制信息等在ID/EX.Reg中,正在檢測是否loaduse冒險指令4在“ID/REG”階段,指令在IF/ID.Reg中,$t1和$t2正在被讀出。在load-use冒險檢測單元中,因為流水段寄存器IF/ID中源操作數寄存器Rs為$t1,流水段寄存器ID/Ex中目的操作數寄存器Rt也為$t1,同時,因為上條指令是lw,故流水段寄存器ID/Ex中的MemRead控制信號為1,所以在該階段檢測到load-use冒險條件滿足,此時,需要進行load-use冒險處理,

16、在流水線中插入一個“氣泡”,將指令的執行阻塞一個時鐘周期。包括以下三個步驟: 將流水段寄存器ID/Ex中的控制信號全部清0,以保證第4條指令被阻塞一個時鐘周期執行; 將流水段寄存器IF/ID中的指令維持不變,以保證第4條指令重新譯碼后執行; 將PC的值維持不變,以保證根據PC的值重新取出第5條指令。結束時完成上述工作。指令5在“IF”階段,指令正被讀出。結束時已送到流水段寄存器IF/ID的輸入端。因為之前發生了load-use數據冒險,所以該指令將在隨后的第6個時鐘周期內重新被讀出。8. 假定有一個程序的指令序列為“lw, add, lw, add, ”。add指令僅依賴它前面的lw指令,而l

17、w指令也僅依賴它前面的add指令,寄存器寫口和寄存器讀口分別在一個時鐘周期的前、后半個周期內獨立工作。請問:(1)在帶轉發的五段流水線中執行該程序,其CPI為多少?(2)在不帶轉發的五段流水線中執行該程序,其CPI為多少?參考答案:(1)因為lw指令和add指令之間存在一個load- use數據冒險,所以每個lw指令和add指令之間要有一次流水線阻塞。而add指令和lw指令之間的數據冒險可通過數據轉發解決。即:CPI為1.5(2)如果沒有轉發,而寄存器寫口和寄存器讀口分別在一個時鐘周期的前、后半個周期內工作,則在每條lw指令和add指令之間將會有兩個阻塞,這樣每條指令相當于都要有三個時鐘才能完

18、成。即:CPI為39. 假定在一個帶轉發功能的五段流水線中執行以下程序段,則可以怎樣調整以下指令序列使其性能達到最好?參考答案:1lw $2, 100($6)2add $2, $2, $33lw $3, 200($7)4add $6, $4, $75sub $3, $4, $66lw $2, 300($8)7beq $2, $8, Loop因為采用“轉發”技術,所以,只要對load-use數據冒險進行指令序列調整。從上述指令序列來看,第1和第2條指令、第6和第7條指令之間存在load-use數據冒險,所以,可將與第2和第3條指令無關的第4條指令插入第2條指令之前;將無關的第5條指令插入第7條指

19、令之前。調整順序后的指令序列如下(粗體部分為變換了位置的指令)。lw $2, 100($6)add $6, $4, $7add $2, $2, $3lw $3, 200($7)lw $2, 300($8)sub $3, $4, $6beq $2, $8, Loop10. 在一個采用“取指、譯碼/取數、執行、訪存、寫回”的五段流水線中,若檢測結果是否為“零”的操作在執行階段進行,則分支延遲損失時間片(即分支延遲槽)為多少?以下一段MIPS指令序列中,在考慮數據轉發的情況下,哪些指令執行時會發生流水線阻塞?各需要阻塞幾個時鐘周期? 1 loop:add $t1, $s3, $s32add $t1,

20、 $t1, $t13add $t1, $t1, $s64lw $t0, 0($t1)5bne $t0, $s5, exit6add $s3, $s3, $s47jloop8exit:參考答案:若檢測操作在執行階段進行,則分支延遲損失時間片(即分支延遲槽)為2。分析:發生數據相關的是:第1和第2條指令之間關于$t1,第2和第3條指令之間關于$t1,第3和第4條指令之間關于$t1,第4和第5條指令之間關于$t0,以及第6和第1條指令之間關于$s3。此外,第5和第7條指令的執行都會發生控制相關。對于數據冒險,如果不采用“轉發”,而是簡單地通過加入nop指令來避免冒險的話,那么應該在第2、3、4、5條

21、指令前各加兩條nop指令,以消除數據相關;對于第6條和第1條指令之間的數據相關,則可通過在第7條“j loop”指令后面加一條或兩條nop指令消除(這樣同時還能解決第7條“j loop”指令的控制冒險);此處,第2、3、4條指令所需的操作數可通過“轉發”得到,無需加nop指令。第5條bne指令所需的操作數$t0是load-use冒險,不能用“轉發”解決問題,需要在第5條指令前加一條nop指令,或通過硬件將第5條指令的執行阻塞一個時鐘周期。j指令如果在譯碼階段就根據譯碼結果計算跳轉目標地址,那么j指令后面指令會被阻塞1個時鐘周期,若在執行階段計算,則要阻塞2個時鐘周期。- 其它11. 假設數據通

22、路中各主要功能單元的操作時間為:存儲單元:200ps;ALU和加法器:100ps;寄存器堆讀口或寫口:50ps。程序中指令的組成比例為:取數25%、存數10%、ALU52%、分支11%、跳轉2%。假設時鐘周期取存儲器存取時間的一半,MUX、控制單元、PC、擴展器和傳輸線路等的延遲都忽略不計,則下面的實現方式中,哪個更快?快多少?(1)單周期方式:每條指令在一個固定長度的時鐘周期內完成;(2)多周期方式:每類指令時鐘數:取數-7,存數-6,ALU-5,分支-4,跳轉-4;(3)流水線方式:取指1、取指2、取數/譯碼、執行、存取1、存取2、寫回7段流水線;沒有結構冒險;數據冒險采用“轉發”技術處理

23、;load指令與后續各指令之間存在依賴關系的概率分別1/2、1/4、1/8、;分支延遲損失時間片為2,預測準確率為75%;不考慮異常、中斷和訪問失效引起的流水線冒險。參考答案:單周期:存儲器操作變為兩個時鐘周期后,其數據通路的時鐘周期不變,為600ps多周期:CPI=0.25x7+0.10x6+0.52x5+0.11x4+0.02x4 = 5.47 存儲器操作變為兩個時鐘周期后,多周期數據通路的時鐘周期為100ps, 故一條指令的執行時間為100x5.47=547ps 流水線:存儲器操作變為兩個時鐘周期后,其流水線包含了7個階段.對于ALU指令,隨后的數據相關指令都可通過轉發解決,故CPI=1對于Store指令,不會發生數據冒險,故CPI=1對于Jump指令,總要等到譯碼結束才能確定轉移地址,故CPI=3(取指1,2,譯碼) 對于beq,若預測正確,則為1個周期,若預測錯誤,則為3個周期,故CPI=1/4x3+3/4x1=1.5 對于load,隨后第一條則為3個(阻塞2個)周期;隨后第二條則為2個(阻塞1個)周期,以后的指令都不需要阻塞,故CPI=1/2x3+1/4x2+2/8x1=2.25 平均CPI為:2.25x25%+1x10%+1x52%+1.5x11%+3x2%=1.41 所以, 1條指令的執行時間為1.41x100=141(ps)12.假設有一段程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論