《計(jì)算機(jī)體系結(jié)構(gòu)》第三次實(shí)驗(yàn) WinDLX流水線實(shí)驗(yàn)_第1頁
《計(jì)算機(jī)體系結(jié)構(gòu)》第三次實(shí)驗(yàn) WinDLX流水線實(shí)驗(yàn)_第2頁
《計(jì)算機(jī)體系結(jié)構(gòu)》第三次實(shí)驗(yàn) WinDLX流水線實(shí)驗(yàn)_第3頁
《計(jì)算機(jī)體系結(jié)構(gòu)》第三次實(shí)驗(yàn) WinDLX流水線實(shí)驗(yàn)_第4頁
《計(jì)算機(jī)體系結(jié)構(gòu)》第三次實(shí)驗(yàn) WinDLX流水線實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)三 WinDLX流水線實(shí)驗(yàn)王宇航安全0901班09283020實(shí)驗(yàn)三 WinDLX流水線實(shí)驗(yàn)1 實(shí)驗(yàn)?zāi)康模和ㄟ^本實(shí)驗(yàn),加深對結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)和指令調(diào)度的理解,了解結(jié)構(gòu)相關(guān)對CPU性能的影響,掌握如何使用定向技術(shù)來減少數(shù)據(jù)相關(guān)帶來的暫停,了解指令調(diào)度技術(shù)對CPU性能改進(jìn)的好處。2 實(shí)驗(yàn)內(nèi)容:2.1 用WinDLX模擬器進(jìn)行結(jié)構(gòu)相關(guān)的分析 1、生成structure.s程序。用WinDLX模擬器運(yùn)行該程序。 2、通過模擬,找出存在結(jié)構(gòu)相關(guān)的指令對,以及導(dǎo)致結(jié)構(gòu)相關(guān)的部件。 3、記錄由結(jié)構(gòu)相關(guān)引起的暫停時(shí)鐘周期數(shù),計(jì)算暫停時(shí)鐘周期數(shù)占總執(zhí)行周期數(shù)的百分比。2.2 用WinDLX模擬器分析數(shù)據(jù)相

2、關(guān) 1、生成data.s程序。 2、通過Configuration菜單中的選項(xiàng),設(shè)定在不采用定向技術(shù)的情況下,用WinDLX模擬器運(yùn)行程序data_d.s。記錄數(shù)據(jù)相關(guān)引起的暫停時(shí)鐘周期數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù),計(jì)算暫停時(shí)鐘周期數(shù)占總執(zhí)行周期數(shù)的百分比。 3、在采用定向技術(shù)的情況下,用WinDLX模擬器再次運(yùn)行程序data_d.s。記錄數(shù)據(jù)相關(guān)引起的暫停時(shí)鐘周期數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù),計(jì)算暫停時(shí)鐘周期數(shù)占總執(zhí)行周期數(shù)的百分比。2.3 用WinDLX模擬器分析指令調(diào)度 1、生成sch-before.s及sch-after.s程序。 2、通過Configuration菜單中的選項(xiàng),將除法

3、單元數(shù)設(shè)置為3,將加法乘法除法的延遲設(shè)置為3個(gè)時(shí)鐘周期。 3、用WinDLX模擬器運(yùn)行調(diào)度前的程序sch-before.s 。記錄程序執(zhí)行過程中各種相關(guān)發(fā)生的次數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù)。 4、用WinDLX模擬器運(yùn)行調(diào)度后的程序sch-after.s ,記錄程序執(zhí)行過程中各種相關(guān)發(fā)生的次數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù)。2.4 綜合實(shí)驗(yàn)(習(xí)題3.4)在WinDLX上運(yùn)行如下代碼序列:LOOP:LWR1,0(R2) ADDIR1,R1,#1SW0(R2),R1ADDIR2,R2,#4SUBR4,R3,R2BNEZR4,LOOP其中:R3的初值是R2+396。假設(shè):在整個(gè)代碼序列的運(yùn)行過程中,所有

4、的存儲器訪問都是命中的,并且在一個(gè)時(shí)鐘周期中對同一個(gè)寄存器的讀操作和寫操作可以通過寄存器文件“定向”。1、 在沒有任何其他定向(或旁路)硬件的支持下,假設(shè)采用排空流水線的策略處理分支指令,且所有的存儲器訪問都是命中Cache,那么執(zhí)行上述代碼需要多少個(gè)時(shí)鐘周期?2、 假設(shè)該流水線有正常的定向路徑,且采用預(yù)測分支失敗的策略處理分支指令,所有的存儲器訪問都命中Cache,那么執(zhí)行上述代碼需要多少個(gè)時(shí)鐘周期?3、 假設(shè)該流水線有正常的定向路徑和一個(gè)單周期延遲分支,請對該循環(huán)中的指令進(jìn)行調(diào)度,但是不能增加指令的條數(shù)。計(jì)算執(zhí)行上述代碼所需要的時(shí)鐘周期數(shù)。3 實(shí)驗(yàn)過程:3.1 用WinDLX模擬器進(jìn)行結(jié)構(gòu)

5、相關(guān)的分析3.1.1 實(shí)驗(yàn)過程: 用WinDLX打開之前編寫好的structure.s程序,單步執(zhí)行,查看Clock Cycle Diagram窗口中的變化: 可以看出指令“ADDIR2, R2, #8 ”和指令“LD F0, 0(R2)”發(fā)生結(jié)構(gòu)沖突。可以看出“ADDIR2, R2, #8”、“ADDI R3, R3, #8” 和“SUBIR5, R5, #1”這三條指令和“ADDD F4, F0, F2”存在結(jié)構(gòu)相關(guān)。導(dǎo)致結(jié)構(gòu)相關(guān)的部件是存儲數(shù)據(jù)和指令的存儲器部件。通過單步執(zhí)行可以在code窗口中觀察到程序的LOOP段共循環(huán)了10次,而且上述的因結(jié)構(gòu)沖突引起暫停的指令都是在LOOP循環(huán)中。

6、所以程序執(zhí)行完畢后,因結(jié)構(gòu)沖突引起的暫停周期數(shù)為2×10=20,由圖3可知,程序總共執(zhí)行了117個(gè)時(shí)鐘周期。所以暫停時(shí)鐘數(shù)占總執(zhí)行周期的百分比為:20/117 = 17.09 %。3.1.2 結(jié)構(gòu)相關(guān)對CPU性能的影響及解決結(jié)構(gòu)相關(guān)的方法:上述四對指令在流水線中重疊執(zhí)行時(shí)產(chǎn)生了對存儲器訪問的資源沖突,即結(jié)構(gòu)相關(guān)問題。上述WinDLX的執(zhí)行過程采用了流水化功能單元的解決辦法來解決結(jié)構(gòu)相關(guān),CPU產(chǎn)生了暫停周期,使流水線的性能下降。且暫停周期占總執(zhí)行周期的百分比還比較大,是一個(gè)不容忽視的問題。解決結(jié)構(gòu)相關(guān)通常需要采用流水線功能單元的方法或資源重復(fù)的方法。既然流水線功能單元的方法引入的暫停

7、影響了流水線的性能,可以考慮采用資源重復(fù)的方法,即在流水線機(jī)器中設(shè)置相互獨(dú)立的指令存儲器和數(shù)據(jù)存儲器,也可將Cache分割成指令Cache和數(shù)據(jù)Cache,這樣就能夠很好的消除結(jié)構(gòu)相關(guān)。但是這樣做會帶來很大的硬件開銷,對流水線機(jī)器而言,如果要在每個(gè)時(shí)鐘周期內(nèi),能夠支持取指令操作和對數(shù)據(jù)的存儲訪問操作同時(shí)進(jìn)行,而又不發(fā)生結(jié)構(gòu)相關(guān),那么存儲總線的帶寬必須要加倍。所以在解決該問題時(shí)要在性能和開銷兩方面進(jìn)行權(quán)衡。3.2 用WinDLX模擬器分析數(shù)據(jù)相關(guān)3.2.1 實(shí)驗(yàn)過程: 用WinDLX打開之前寫好的data_d.s程序,配置Configuration菜單中的選項(xiàng),設(shè)定不采用定向技術(shù)。記錄數(shù)據(jù)相關(guān)引

8、起的暫停時(shí)鐘周期數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù),結(jié)果如下:可以看出,在不采用定向技術(shù)的情況下,data_d.s程序總過執(zhí)行了202個(gè)時(shí)鐘周期,其中由數(shù)據(jù)相關(guān)引起的暫停周期為104個(gè),占總執(zhí)行周期的51.48%。配置Configuration菜單中的選項(xiàng),設(shè)定采用定向技術(shù)。記錄數(shù)據(jù)相關(guān)引起的暫停時(shí)鐘周期數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù),結(jié)果如下:可以看出,采用定向技術(shù)之后,data_d.s程序總過執(zhí)行了128個(gè)時(shí)鐘周期,其中由數(shù)據(jù)相關(guān)引起的暫停周期為30個(gè),占總執(zhí)行周期的23.44%。3.2.2 總結(jié): 由上述記錄可知,通過定向技術(shù),減少了數(shù)據(jù)相關(guān)所引起的暫停周期的數(shù)量,縮短了程序的執(zhí)行周期,整個(gè)性能

9、是原來的1.58倍。3.3 用WinDLX模擬器分析指令調(diào)度3.3.1 實(shí)驗(yàn)過程:通過Configuration菜單中的選項(xiàng),將除法單元數(shù)設(shè)置為3,將加法乘法除法的延遲設(shè)置為3個(gè)時(shí)鐘周期。用WinDLX模擬器運(yùn)行調(diào)度前的程序sch-before.s 。記錄程序執(zhí)行過程中各種相關(guān)發(fā)生的次數(shù)以及程序執(zhí)行的總時(shí)鐘周期數(shù)。結(jié)果如下: 可以看出,sch-before.s程序執(zhí)行的總時(shí)鐘周期數(shù)為31,總暫停周期數(shù)為16,其中寫后讀相關(guān)(RAW)暫停周期為9個(gè),Trap 暫停周期為7個(gè)。用WinDLX模擬器運(yùn)行調(diào)度前的程序sch-after.s 。記錄程序執(zhí)行過程中各種相關(guān)發(fā)生的次數(shù)以及程序執(zhí)行的總時(shí)鐘周期

10、數(shù)。結(jié)果如下:可以看出,sch-after.s 程序執(zhí)行的總時(shí)鐘周期數(shù)為25,總暫停周期數(shù)為9,其中寫后讀相關(guān)(RAW)暫停周期為3個(gè),Trap 暫停周期為6個(gè)。3.3.2 總結(jié):經(jīng)調(diào)度之后,程序執(zhí)行的總時(shí)鐘周期數(shù)從31減到了25,同時(shí)各種類型的暫停周期數(shù)也相應(yīng)了減少了。通過編譯器重新組織代碼順序來實(shí)現(xiàn)“指令調(diào)度”,消除了一部分的暫停周期,使流水線性能得到了提高。3.4 綜合實(shí)驗(yàn)(習(xí)題3.4)1、 根據(jù)實(shí)驗(yàn)內(nèi)容二中的data_d.s程序,將程序做修改如下,生成3_4_before.s: 其中R2是數(shù)組A的基址,R3是數(shù)組B的基址,R3 = R2+4*9= R2+36,模擬了9個(gè)循環(huán)。因?yàn)镽3

11、=R2 + 396,所以共396/4 = 99個(gè)循環(huán)。 用WinDLX運(yùn)行3_4_before.s,配置Configuration菜單中的選項(xiàng),設(shè)定不采用定向技術(shù)。程序在一個(gè)循環(huán)周期內(nèi)的流水線時(shí)空圖如下所示:由圖中分支指令后的trap指令的執(zhí)行可以看出,WinDLX對分支指令采用的是預(yù)測分支失敗的方法,即在分支指令取指后的下一個(gè)周期取下一條指令。當(dāng)分支指令跳轉(zhuǎn)成功時(shí),流水線就把在分支指令之后取出的所有指令轉(zhuǎn)化為空操作,并按分支目標(biāo)地址重新取指令執(zhí)行??梢钥闯觯瑘?zhí)行一個(gè)循環(huán)需要 -15-(-30)=15個(gè)周期。在一個(gè)循環(huán)周期內(nèi),指令序列的流水線時(shí)空圖如下所示:S代表R-Stall。與WinDLX

12、中運(yùn)行出的流水線時(shí)空圖不同之處在于,這里采用的是排空流水線處理分支指令,即在第15時(shí)鐘周期,當(dāng)流水線在ID段檢測到分支指令“BNEZ R4, LOOP”后,就暫停執(zhí)行其后的所有指令,直到分支指令到達(dá)MEM段,確定是否分支成功并計(jì)算出新的PC值為止。這里,因?yàn)榉种С晒Γ灾匦氯≈噶睢癓WR1, 0(R2)”執(zhí)行。由圖9可以看出,執(zhí)行完一個(gè)循環(huán)需要的時(shí)鐘周期數(shù)為:18 -1 =17. 由于R3 =R2 + 396,因此共有396/4 = 99個(gè)循環(huán)。故執(zhí)行完整個(gè)程序所需要的時(shí)鐘周期數(shù)為 17×98 + 18 = 1684。2、 用WinDLX運(yùn)行3_4_before.s,配置Confi

13、guration菜單中的選項(xiàng),設(shè)定采用定向技術(shù)。程序在一個(gè)循環(huán)周期內(nèi)的流水線時(shí)空圖如下所示: 由上述可知WinDLX對分支指令采用的是預(yù)測分支失敗的方法。且由圖10可以看出,在采用定向的條件下,執(zhí)行一個(gè)循環(huán)需要-2-(-11)= 9個(gè)周期。在一個(gè)循環(huán)周期內(nèi),指令序列的流水線時(shí)空圖如下所示: 與WinDLX中運(yùn)行出的流水線時(shí)空圖不同之處在于,這里分支指令后沒有“TRAP #0”指令。因而在采用預(yù)測分支失敗的策略處理分支指令的情況下,流水線中繼續(xù)流水的是“LW R1, 0(R2)”指令。分支成功后重新取指令“LW R1, 0(R2)”執(zhí)行。 由圖可知,執(zhí)行完一個(gè)循環(huán)需要的時(shí)鐘周期數(shù)為:11 -1

14、=10。 執(zhí)行完整個(gè)程序所需要的時(shí)鐘周期數(shù)為 10×98 + 11 = 991。3、 按照題的要求對該循環(huán)中的指令進(jìn)行調(diào)度,采用的調(diào)度方法為:將獨(dú)立執(zhí)行的指令“ADDIR2, R2, #4”前移至“LW R1, 0(R2)”后;將分支指令前的一條指令“SW 0(R2), R1”修改為“SW -4(R2), R1”,后移至分支指令“BNEZR4, LOOP”后作為延遲槽中的指令。調(diào)度后程序如下所示:將調(diào)度后的程序保存為3_4_after.s,導(dǎo)入WinDLX,設(shè)定為采用定向技術(shù),運(yùn)行該程序。在一個(gè)循環(huán)周期內(nèi),該指令序列的流水線時(shí)空圖如下所示:由上圖可以看出,在采用預(yù)測分支失敗的策略處理分支指令時(shí),分支指令“BNEZ R4, LOOP”跳轉(zhuǎn)成功后,停止了其后繼指令“SW -4(R2), R1”的執(zhí)行,直接轉(zhuǎn)向分支目標(biāo)指令“LW R1, 0(R2)”處執(zhí)行。在這種情況下,執(zhí)行一個(gè)循環(huán)需要 -3-(-10)=7個(gè)時(shí)鐘周期。 在一個(gè)循環(huán)周期內(nèi),指令序列的流水線時(shí)空圖如下所示: 與WinDLX中運(yùn)行出的流水線時(shí)空圖不同之處在于,這里是采用單周期延遲分支的

溫馨提示

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

評論

0/150

提交評論