計算機系統(tǒng)結(jié)構(gòu)winDLX流水線實驗報告_第1頁
計算機系統(tǒng)結(jié)構(gòu)winDLX流水線實驗報告_第2頁
計算機系統(tǒng)結(jié)構(gòu)winDLX流水線實驗報告_第3頁
計算機系統(tǒng)結(jié)構(gòu)winDLX流水線實驗報告_第4頁
計算機系統(tǒng)結(jié)構(gòu)winDLX流水線實驗報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1 計算機科學(xué)與技術(shù)學(xué)院 計算機體系結(jié)構(gòu) 課程實驗 學(xué) 號 班 級 專 業(yè) 學(xué)生姓名 年 月 日 2 實實 驗驗 報報 告告 學(xué)生姓名 學(xué)生姓名 學(xué)學(xué) 號 號 時間 時間 地點 地點 實驗課程名稱 實驗課程名稱 計算機體系結(jié)構(gòu) 一 實驗名稱 一 實驗名稱 流水線中的相關(guān) 求 n 個數(shù)的方差 二 實驗原理 二 實驗原理 1 WinDLX WinDLX 模擬器是一個圖形化 交互式的 DLX 流水線模擬器 能夠演示 DLX 流水線是 如何工作的 該模擬器可以裝載 DLX 匯編語言程序 后綴為 s 的文件 然后單步 設(shè)斷 點或是連續(xù)執(zhí)行該程序 CPU 的寄存器 流水線 I O 和存儲器都可以用圖形表示出來 以 形象生動的方式描述 DLX 流水線的工作過程 模擬器還提供了對流水線操作的統(tǒng)計功能 便于對流水線進行性能分析 2 流水線執(zhí)行過程 指令執(zhí)行的5個階段 1 取指令周期 2 指令譯碼 讀寄存器周期 3 執(zhí)行 有效地址計算周期 4 存儲器訪問 分支完成周期 5 寫回周期 3 流水線中的相關(guān) 1 結(jié)構(gòu)相關(guān) 當某一條機器指令需要訪問物理器件時 如加法器 此時加法器正被另 一條機器指令使用 從而產(chǎn)生結(jié)構(gòu)相關(guān) 2 數(shù)據(jù)相關(guān) 當某一條指令需要訪問某個寄存器時 此時這個寄存器正被另一條指令 所使用 從而產(chǎn)生數(shù)據(jù)相關(guān) 3 控制相關(guān) 當程序執(zhí)行到某個分支語句時 順序執(zhí)行的下一條語句將被跳過而去執(zhí) 行分支語句中滿足條件的那條指令 從而產(chǎn)生控制相關(guān) 3 三 實驗?zāi)康?三 實驗?zāi)康?1 通過該模擬實驗 進一步掌握和鞏固流水線的基本知識 2 初步掌握在特定體系結(jié)構(gòu)下的匯編代碼的編寫和優(yōu)化 3 培養(yǎng)運用所學(xué)知識解決實際問題的能力 4 對流水線性能分析 5 了解影響流水線效率的因素 6 了解各類相關(guān)及解決方法 四 實驗內(nèi)容 四 實驗內(nèi)容 使用 WinDLX 模擬器 對 Variance s 做如下分析 1 分析 Variance s 和 Input s 輸入順序不同時產(chǎn)生的影響 2 分析 Variance s 中匯編語言含義 同時分析程序執(zhí)行流程 3 觀察程序中出現(xiàn)的數(shù)據(jù) 控制 結(jié)構(gòu)相關(guān) 指出程序中出現(xiàn)上述現(xiàn)象的指令組合 4 考察增加運算部件對性能的影響 5 考察增加 forward 部件對性能的影響 6 觀察轉(zhuǎn)移指令在轉(zhuǎn)移成功和轉(zhuǎn)移不成功時候的流水線開銷 注意 除 4 以外 加 乘 除部件都只有一個 本問題中所有部件延遲設(shè)置為 加 法 2 個延遲周期 乘法 5 個延遲周期 除法 19 個延遲周期 五 實驗器材 設(shè)備 元器件 五 實驗器材 設(shè)備 元器件 IBM PC 兼容機 Windows 3 0 以上的操作系統(tǒng) 六 實驗步驟及操作 六 實驗步驟及操作 1 雙擊 WinDLX 圖標運行 WinDLX 裝入測試程序之前 先初始化 WinDLX 模擬器 點擊 File 菜單中的 Reset all 菜單項 彈出一個 Reset DLX 對話框 然后點擊窗口中的 確 認 按鈕即可 2 選擇 File Load Code or Data 按如下步驟操作 可將 Variance s 和 Input s 這兩個程 序裝入主存 點擊 Variance s 點擊 select 按鈕 點擊 Input s 點擊 select 按鈕 點擊 load 按鈕 3 按 F7 鍵程序順序執(zhí)行觀察 6 個子窗口的情況 4 七 實驗數(shù)據(jù)及結(jié)果分析 七 實驗數(shù)據(jù)及結(jié)果分析 1 先裝入 Variance s 再轉(zhuǎn)入 Input s 時 因為程序順序執(zhí)行 地址順序符合程序執(zhí)行 順序 程序能夠正確執(zhí)行 順序相反時 因為 Input s 的地址高 而程序順序執(zhí)行到 Input s 時將沒有正確的輸入窗口 程序執(zhí)行到輸出結(jié)果時 也不會出現(xiàn)結(jié)果 2 程序中出現(xiàn)的三種相關(guān) 1 數(shù)據(jù)相關(guān) 以圖 1 中出現(xiàn)的兩個數(shù)據(jù)相關(guān)為例 下面兩條指令中 因為第二條指令要讀 r3 而執(zhí)行到此操作時加載指令仍對 r3 進行操作 因此出現(xiàn)了數(shù)據(jù)相關(guān) lbu r3 0 r2 seqi r5 r3 10 下面兩條指令中 因為加法指令要讀 r1 而執(zhí)行到此操作時乘法指令仍對 r 進行 操作 因此出現(xiàn)了數(shù)據(jù)相關(guān) multu r1 r1 r4 add r1 r1 r3 圖 1 數(shù)據(jù)相關(guān) 2 控制相關(guān) 以圖 2 中出現(xiàn)的控制相關(guān)為例 下面兩條指令中 因為第一條指令出現(xiàn)跳轉(zhuǎn)指令時 存儲指令的取指將作廢 所 以出現(xiàn)控制相關(guān) jal InputUnsigned sw PrintfValue r3 r1 圖 2 控制相關(guān) 5 3 結(jié)構(gòu)相關(guān) 以圖 3 中出現(xiàn)的結(jié)構(gòu)相關(guān)為例 下面兩條指令中 因為當?shù)诙l乘法指令需要使用乘法器時 第一條乘法指令仍 在使用乘法器 所以出現(xiàn)結(jié)構(gòu)相關(guān) mult r2 r0 r0 mult r3 r0 r0 圖 3 結(jié)構(gòu)相關(guān) 3 主程序 Variance s 的代碼 data data 標識下面的數(shù)據(jù)放在數(shù)據(jù)區(qū)中 輸入語句 指示你輸入要求多少個數(shù)的方差 Prompt asciiz Please input An integer which is array s size value 0 輸入語句 指示你輸入要求方差的數(shù) PromptLast asciiz Please input the integer 輸出格式 表示求出的方差按什么格式輸出 PrintfFormat asciiz the Variance is g 表示下面采用字對齊 align 2 word 在存儲器中順序存放列出的字 PrintfPar word PrintfFormat 在存儲區(qū)中空出相應(yīng)大小的區(qū)域 Printf space 8 Variance space 8 PrintfValue space 1024 text text 標識下面的代碼存放在代碼區(qū)中 global main global 標識 main 可以被全局訪問 main 將 Prompt 字符串首地址放入 r1 寄存器中 addi r1 r0 Prompt 跳轉(zhuǎn)向 InputUnsigned 標識的地址 調(diào)用 input 子函數(shù)讀取數(shù)組大小的 值 jal InputUnsigned 將 input 函數(shù)讀取的數(shù)放入寄存器中 add r5 r0 r1 add r6 r0 r1 6 add r7 r0 r1 add r8 r0 r1 addi r3 r0 0 循環(huán)調(diào)用 input 函數(shù)讀數(shù) InputArray r5 寄存器中的值為 0 則跳轉(zhuǎn)向 ProcessPart 標識的地址 beqz r5 ProcessPart addi r1 r0 PromptLast jal InputUnsigned 將 r1 寄存器中的數(shù)放入 r3 寄存器中所存數(shù)地址的存儲器中 sw PrintfValue r3 r1 addi r3 r3 4 subi r5 r5 1 無條件跳轉(zhuǎn)向 InputArray 標識的指令地址 j InputArray ProcessPart r2 r3 寄存器中數(shù)清 0 mult r2 r0 r0 mult r3 r0 r0 Loop1 r6 寄存器中的值為 0 則跳轉(zhuǎn)向 Average1 標識的地址 beqz r6 Average1 將 r3 寄存器中所存地址的存儲器中的數(shù)加載到 r1 中 lw r1 PrintfValue r3 求出 n 個數(shù)的累加和存入 r2 中 add r2 r2 r1 addi r3 r3 4 subi r6 r6 1 無條件跳轉(zhuǎn)向 Loop1 標識的指令地址 j Loop1 Average1 求出 n 個數(shù)的平均數(shù)存入 r9 中 div r9 r2 r8 r2 r3 寄存器中數(shù)清 0 mult r2 r0 r0 mult r3 r0 r0 Loop2 r7 寄存器中的值為 0 則跳轉(zhuǎn)向 Average2 標識的地址 beqz r7 Average2 將 r3 寄存器中所存地址的存儲器中的數(shù)加載到 r1 中 lw r1 PrintfValue r3 求出 n 個數(shù)與平均數(shù)差值平方的累加和 7 sub r10 r1 r9 mult r10 r10 r10 add r2 r2 r10 addi r3 r3 4 subi r7 r7 1 無條件跳轉(zhuǎn)向 Loop2 標識的指令地址 j Loop2 Average2 求出方差存入 r11 中 div r11 r2 r8 output 將方差存入 Variance 所指存儲空間中 sw Variance r11 轉(zhuǎn)換為雙精度并輸出 lf f2 Variance cvti2d f0 f2 sd Printf f0 addi r14 r0 PrintfPar trap 5 調(diào)用中斷 格式化輸出轉(zhuǎn)化為標準輸出 over trap 0 調(diào)用系統(tǒng)中斷 0 表示程序執(zhí)行結(jié)束 4 樣例輸出 以圖 4 中數(shù)據(jù)為例 輸入需要求方差數(shù)的個數(shù)為 4 4 個數(shù)分別為 3 5 6 2 輸出結(jié)果為 2 圖 4 輸出界面 5 盡量減少和消除程序中出現(xiàn)的相關(guān) 1 消除數(shù)據(jù)相關(guān) a 采用定向技術(shù) 在發(fā)生數(shù)據(jù)相關(guān)時 等待前面計算結(jié)果的指令并不一定真的馬 上就用到該計算結(jié)果 如果能夠?qū)⒃撚嬎憬Y(jié)果從其產(chǎn)生的地方直接送到其他指令需要 它的地方 就可以避免暫停 具體操作為 在 WinDLX 模擬器中選中 Configuration 菜 單中的 Enable Forwarding 選項 b 手動優(yōu)化 以圖 1 中的一個數(shù)據(jù)相關(guān)為例 交換兩條加法指令的順序可消除數(shù) 據(jù)相關(guān) multu r1 r1 r4 multu r1 r1 r4 8 add r1 r1 r3 addi r2 r2 1 addi r2 r2 1 add r1 r1 r3 2 消除控制相關(guān) 循環(huán)展開 將循環(huán)體代碼復(fù)制多次實現(xiàn) 即減少跳轉(zhuǎn)指令執(zhí)行的次數(shù) 循環(huán)展開 能夠增大指令調(diào)度的空間 減少循環(huán)分支指令的開銷 以 Variance s 中的一個循環(huán)體 為例 循環(huán)展開一次后 j Loop1 指令執(zhí)行次數(shù)減少了一半 Loop1 Loop1 beqz r6 Average1 beqz r6 Average1 lw r1 PrintfValue r3 lw r1 PrintfValue r3 add r2 r2 r1 add r2 r2 r1 addi r3 r3 4 addi r3 r3 4 subi r6 r6 1 subi r6 r6 1 j Loop1 beqz r6 Average1 lw r1 PrintfValue r3 add r2 r2 r1 addi r3 r3 4 subi r6 r6 1 j Loop1 3 消除結(jié)構(gòu)相關(guān) 結(jié)構(gòu)相關(guān)的起因是資源爭用 考慮采用資源充分重復(fù)設(shè)置的方法來避免結(jié)構(gòu)相關(guān) 在本程序中產(chǎn)生結(jié)構(gòu)相關(guān)的原因是乘法器爭用 增加一個乘法器可以消除結(jié)構(gòu)相關(guān) 具體操作為 在 WinDLX 模擬器中選中 Configuration 菜單中的 Floating Point Stages Configuration 選項 在彈出的對話框中設(shè)置 6 程序流程圖 1 輸入函數(shù) Input s 流程圖 9 開始 輸入數(shù)字n1 n2 回車結(jié)束 初始化sum 0 j 1 取n j 其值是否為 10 為換行符 sum放入存儲器中 是 結(jié)束 n j n j 48 sum sum 10 n j j 否 2 主程序 Variance s 流程圖 10 開始 輸入數(shù)組 大小n i 1 是 否 初始化Loop1 循環(huán)數(shù)j n j 1 否 j j 1 是 結(jié)束 調(diào)用輸入 子函數(shù) 調(diào)用輸入子 函數(shù) 將輸入累加 求平均數(shù) 初始化Loop2 循環(huán)數(shù)k n K 1 否 k k 1 是 求第j個數(shù)與 平均數(shù)的差 將差的平方 累加 求出方差 初始化InputArray 循環(huán)數(shù)i n i i 1 11 八 實驗結(jié)論 八 實驗結(jié)論 1 程序的裝入要嚴格按照順序 順序?qū)⒂绊懗绦虻恼_執(zhí)行 2 程序執(zhí)行順序 部件的個數(shù)都會對程序的執(zhí)行產(chǎn)生影響 3 為減少數(shù)據(jù)相關(guān) 應(yīng)調(diào)整程序的執(zhí)行順序或采用定向技術(shù) 4 為減

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論