HNU計算機結構體系-實驗2:CPU動態指令調度Tomasulo

文章目錄

  • 實驗2 CPU動態指令調度Tomasulo
    • 一、實驗目的
    • 二、實驗說明
    • 三、實驗內容
      • 問題1:
      • 問題2:
      • 問題3:
      • 問題4:
      • 問題5:
    • 四、思考題
      • 問題1:
      • 問題2:
    • 五、實驗總結

實驗2 CPU動態指令調度Tomasulo

一、實驗目的

熟悉Tomasulo模擬器同時加深對Tomasulo算法的理解,從而理解指令級并行的一種方式-動態指令調度。

掌握Tomasulo算法在指令流出、執行、寫結果各階段對浮點操作指令以及load和store指令進行什么處理;給定被執行代碼片段,對于具體某個時鐘周期,能夠寫出保留站、指令狀態表以及浮點寄存器狀態表內容的變化情況。

二、實驗說明

學習ScoreBoard和Tomasulo算法,并且進行Tomasulo算法的模擬實驗,同時熟悉動態指令調度相關知識

三、實驗內容

Tomasulo算法模擬器

使用模擬器進行以下指令流的執行并對模擬器截圖、回答問題

L.D   F6, 21(R2)
L.D   F2, 0 (R3)
MUL.D  F0, F2, F4
SUB.D  F8, F6, F2
DIV.D  F10,F0, F6
ADD.D  F6, F8, F2

假設浮點功能部件的延遲時間:加減法2個周期,乘法10個周期,load/store2個周期,除法40個周期

問題1:

分別截圖(當前周期2和當前周期3),請簡要說明load部件做了什么改動

答:

周期2:占用Load2部件,Busy置位;R2就緒,將地址 R[R2]+21 保存在Load1部件的地址寄存器

image-20231209104014093

周期3:第一條LD指令執行完畢,地址 M[R[R2]+21] 計算完成,Load1部件將從存儲器讀到的值保存在Load1部件寄存器;R3就緒,將地址 R[R3]+0 保存在Load2部件地址寄存器

image-20231209104037484

寄存器重命名:一個新的指令流出,進入保留站之后,它首先就要檢查操作數,在寄存器中查看對應的操作數有沒有,如果有的話自然萬事大吉直接讀取就可以,如果是基于其他運算指令得到的,并且還沒有完成,寄存器中此時就沒有數值,此時對這個操作數進行標記,標記這個計算指令對應的保留站編號,對于源操作數,也需要改寫成這個指令的保留站編號,這時就完成了寄存器的重命名。

寄存器重命名的好處在于它允許多個指令并行地使用同一個物理寄存器的多個重命名副本,避免了數據相關性的延遲和資源競爭。這可以提高指令級并行性,并允許更多的指令同時執行,從而提高整體性能。

問題2:

請截圖(MUL.D剛開始執行時系統狀態),并說明該周期相比上一周期整個系統發生了哪些改動(指令狀態、保留站、寄存器和Load部件)

答:

MUL.D剛開始執行時是第六個周期:

image-20231209104053775

其上一個周期為第五個周期:

image-20231209104104425

主要變化如下:

  • 指令狀態:發射第六條ADD指令,同時第三條、第四條指令進入執行狀態
  • 保留站:新發射的ADD.D指令占用Add2保留站,進入執行的指令MUL.D和SUB.D開始執行,時間開始倒計時
  • 寄存器:新發射的指令ADD.D指令等待F8寄存器,F6的狀態變成Busy, 原因是新發射的ADD.D指令寫入F6
  • Load部件:無變化

Tomasulo算法采用了保守的策略,確保結果先寫入寄存器文件或數據存儲器,然后在下一個周期才允許其他指令讀取這個結果。這樣可以確保后續指令讀取到的是正確的、已經更新的值,保持數據的一致性。

問題3:

簡要說明是什么相關導致MUL.D流出后沒有立即執行

答:

因為其所需要的一個操作數F2還沒有寫回,即與L.D F2 0(R3)之間的RAW相關

Tomasulo算法通過動態調度的方式,將指令按照其操作數的可用性進行調度。當一個指令需要等待一個操作數時,它會被放置在調度隊列中,直到所有操作數都可用。這種方式可以有效地隱藏RAW依賴的延遲,因為指令可以在操作數就緒后立即被調度執行。

問題4:

請分別截圖(15周期和16周期的系統狀態),并分析系統發生了哪些變化

答:

第十五周期:

image-20231209104118852

第十六周期:

image-20231209104127385

主要變化如下:

  • 指令狀態
    • 第十五個周期時MULT指令剛執行完畢
    • 第十六個周期時將MULT指令的執行結果寫回到F0寄存器中
  • 保留站
    • 第十五個周期時仍在執行MULT指令
    • 第十六個周期時釋放保留站,CBD將結果廣播到指令DIV.D對應的保留站
  • 寄存器
    • 第十五個周期時F0結果還未寫回
    • 第十六個周期時釋放保留站,CBD將結果廣播到寄存器
  • Load部件:無變化

問題5:

回答所有指令剛剛執行完畢時是第多少周期,同時請截圖(最后一條指令寫CBD時認為指令流執行結束)

答:

所有指令執行完畢是第57個周期,DIV.D是執行的最后一條指令, 在第56個周期執行完畢,在第57個周期開始寫結果

image-20231209104223213

四、思考題

問題1:

Tomasulo算法相比Score Board算法有什么異同?(簡要回答兩點:1.分別解決了什么相關問題,2.兩者分別是分布式還是集中式)

答:

Tomasulo

  • 特點:分布式;指令狀態、相關控制和操作數緩存分布在各個部件中(保留站)
  • WAR相關:使用RS的寄存器或指向RS的指針代替指令中的寄存器-寄存器重命名
  • WAW相關:使用RS中的寄存器值或指向RS的指針代替指令中的寄存器
  • RAW相關:檢測到寄存器就緒即沒有沖突再讀取操作數,進入執行階段
  • 結構相關:有結構沖突不發射
  • 結果Forward:從FU廣播結果到RS和寄存器

Score Board

  • 特點:集中式;指令狀態和相關控制都在記分牌處理
  • WAR相關:對操作排隊,僅在讀操作數階段讀寄存器
  • WAW相關:檢測到相關后,停止發射前一條指令,直到前一條指令完成
  • RAW相關:檢測到沒有沖突(寄存器就緒)再讀取操作數,進入執行階段
  • 結構相關:有結構相關不發射
  • 結果Forward:寫回寄存器接觸等待

問題2:

Tomasulo算法是如何解決結構冒險、RAW、WAR和WAW相關的數據冒險?

答:

  • 結構相關: 所有功能部件都完全流水化, 功能部件有序訪問存儲器,有結構沖突不發射
  • RAW相關:Tomasulo通過監測Common Data Bus跟蹤每個源操作數當前是否可用,僅當所有源操作數可用時才允許指令進入執行階段
  • WAR,WAW相關:Tomasulo使用硬件寄存器重命名技術, 以及在發射階段時, RS空閑才發射指令和操作數

WAW相關:

Tomasulo算法可以避免WAW相關,原理是前一個指令先進功能單元,緊接著對應的目標寄存器的標識就修改為了這個保留站的編號,接下來,第二個指令進入功能單元,目的寄存器的標識再次修改成第二個,這時即便是第二個指令先完成并寫回,前一個指令再算好了也不會改變寄存器了,因為在CDB通知各個功能單元的時候,對應的寄存器只會響應第二個指令完成時傳遞發出的CDB信號。
舉例說明:修改模擬器中的默認指令,將最后的加法指令的目的寄存器調整為F12,此時最后兩條指令之間就產生了WAW相關,因為除法指令的執行時間會更長,如果不進行處理的話,就會出現除法指令執行——加法指令執行——加法指令完成寫回——除法指令完成寫回的情況,那么最后F12的結果就會是除法指令的結果,但是這顯然和程序想表達的意思不一致。

image-20231209104237003

而通過使用tomasulo算法,我們可以看到在第五個周期的時候,除法指令流出,進入保留站,F12寄存器保留了除法指令的保留站編號:

image-20231209104246075

在第六個周期的時候,加法指令流出,此時F12的寄存器更改標識為加法指令對應的保留站編號:

image-20231209104256453

那么此時第一條指令什么時候完成就已經不重要了,F12對應的寄存器只會在加法指令完成之后,響應CDB信號讀取數據,可以看到在加法指令完成的第十一個周期,寄存器F12中就獲取了數據:

image-20231209104308559

而繼續執行程序到最后除法指令完成,可以看到最后的除法運算完成之后,F12的寄存器數據也沒有改變,說明Tomasulo算法可以處理WAW相關。

WAR相關:

前一個讀指令先進保留站,有數據的話是直接從寄存器取,沒有的話就是標記上對應的指令的保留站編號,這樣一來,后續的寫操作的目的寄存器和前一個讀的已經不同名了,自然沒有影響。

舉例說明:添加了兩個加法指令,其中第一個指令要讀F12寄存器,第二個指令要寫F12寄存器,如果沒有處理WAR相關,指令亂序執行,就可能會出現因為加法指令完成更快,寫回到F12的位置,第一個加法指令讀到的是第二個指令的結果,但是實際指令的目的是讓它讀除法指令的結果,導致WAR相關。

image-20231209104319484

而在Tomasulo算法中,我們可以看到在第五個周期的時候,除法指令流出,目的寄存器F12此時標記的就是這個除法指令的保留站編號,在這里實現了寄存器的重命名:

image-20231209104326943

接下來第七個周期的時候,添加的第一個加法指令流出,此時檢查操作數,F4在寄存器中已經有了,所以可以直接讀取,F12此時還沒有,所以讀取的是對應指令的保留站編號并存在保留站中:

image-20231209104334952

在之后是第八個周期,添加的第二個寫F12的指令流出,此時因為剛好第四個指令sub指令完成,所以不會存在結構相關的問題,指令直接存放在保留站的第一個位置,并且此時,F12的對應的保留站指令修改為添加的第二個指令:

image-20231209104343471

此時,繼續執行到添加的F12寫回指令完成:

image-20231209104351472

此時F12也已經有了自己的數據了:

image-20231209104400146

如果沒有使用Tomasulo算法,那么可能這個時候添加的第一條指令就會讀取走這個F12的數據并且開始執行,但是因為Tomasulo算法的寄存器重命名規則,他的保留站里存的用的操作數是保留站編號為Mult2的指令的結果數據,所以此時不執行,繼續等待。

繼續執行到除法指令完成:

image-20231209104410257

此時查看保留站,可以看到對應的保留站編號域變更為具體數值域:

image-20231209104417883

接下來開始執行:

image-20231209104425985

這里后面的寫指令沒有對前面的讀指令造成影響,說明Tomasulo算法可以處理WAR相關。

五、實驗總結

在進行這個實驗的過程中,我深入學習和研究了Tomasulo算法和指令級并行的動態指令調度方法,并通過Tomasulo模擬器進行了實際操作和觀察。以下是我在這個實驗中的心得體會和收獲:

  1. 對Tomasulo算法的理解加深:通過實驗,我對Tomasulo算法的原理和實現方式有了更深入的理解。我了解了如何使用寄存器重命名、亂序執行和指令調度等技術來實現指令級并行,提高處理器的性能。這個算法的核心思想和設計對于理解現代處理器的工作原理非常重要。
  2. 實踐操作的重要性:通過使用Tomasulo模擬器,我能夠親身操作和觀察指令級并行的過程,這對于加深理論知識的理解非常有幫助。通過在模擬器上進行實驗,我能夠看到指令之間的依賴關系、執行時間和調度策略對性能的影響,從而更好地理解并行執行的原理。
  3. 學以致用:這個實驗不僅僅是理論學習,更是將理論知識應用于實際情境的實踐。通過實驗,我能夠更好地將Tomasulo算法應用于指令級并行的場景,并理解其在提高處理器性能方面的作用。這種將理論知識轉化為實際應用的能力對于我今后在計算機體系結構和并行計算領域的學習和研究都具有重要意義。

綜上所述,通過這個實驗,我不僅熟悉了Tomasulo模擬器和動態指令調度的實踐操作,還加深了對Tomasulo算法和指令級并行的理解。這個實驗為我今后在計算機體系結構和并行計算領域的學習和研究打下了堅實的基礎,并培養了我動手實踐和團隊合作的能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據挖掘】國科大蘇桂平老師數據庫新技術課程作業 —— 第三次作業

part 1 設計一個學籍管理小系統。系統包含以下信息: 學號、學生姓名、性別、出生日、學生所在系名、學生所在系號、課程名、課程號、課程類型(必修、選修、任選)、學分、任課教師姓名、教師編號、教師職稱、教師所屬系名、系號、學生所選課…

汽車網絡安全--ISO\SAE 21434解析(一)

目錄 1.標準總覽 2.示例分析 2015年美國黑帽大會,知名網絡安全專家Charlie Miller和Chris Valasek詳細描述了他們是如何在有限距離下通過WiFI入侵到Jeep大切諾基的中控系統,從此關于汽車網絡安全的討論拉開了序幕。 2016 年,ISO 道路車輛技術委員會與 SAE 聯合成立 SC32/…

【算法每日一練]-結構優化(保姆級教程 篇5 樹狀數組)POJ3067日本 #POJ3321蘋果樹 #POJ2352星星

目錄 今天知識點 求交點轉化求逆序對,每次操作都維護一個y點的前綴和 樹的變動轉化成一維數組的變動,利用時間戳將節點轉化成區間 先將y排序,然后每加入一個就點更新求一次前綴和 POJ3067:日本 思路: POJ3321蘋…

案例063:基于微信小程序的傳染病防控宣傳系統

文末獲取源碼 開發語言:Java 框架:springboot JDK版本:JDK1.8 數據庫:mysql 5.7 開發軟件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序開發軟件:HBuilder …

leetcode系列:反轉鏈表的形象表示

反轉鏈表是一道比較簡單的題,主要考察的是對鏈表數據結構的理解和雙指針應用,比較容易出錯的地方是指針的移動順序。在練習的過程中想到了一個比較形象的表示方法,于是記錄下來。 # Definition for singly-linked list. # class ListNode: #…

地理信息系統概論

地理信息系統概論 第一章導論第二章地理信息系統的數據結構第三章空間數據的處理第四章地理信息系統空間數據庫第五章空間分析的原理與方法第六章地理信息系統的應用模型第七章地理信息系統的設計與評價第八章地理信息系統產品的輸出與設計 第一章導論 數據與信息的關系&#…

Java基礎-java.util.Scanner接收用戶輸入

目錄 1. 導入所需要的jar包2. 編寫代碼運行3. 輸出運行結果 1. 導入所需要的jar包 import java.util.Scanner;2. 編寫代碼運行 public class ScannerDemo {public static void main(String[] args) {/** 使用Scanner接收用戶鍵盤輸入的數據* 1. 導包:告訴程序去JD…

【Python】translate包報錯RuntimeError: generator raised StopIteration

根據網上有些教程,使用translate包翻譯稍微復雜語句的時候,會報錯RuntimeError: generator raised StopIteration 實際測試之后發現,主要是from_lang、to_lang兩個參數的設置有問題,比如有人說中文寫"Chinese"、"Z…

Mysql、Oracle安全項檢查表及操作腳本

軟件開發全資料獲取:點我獲取 Mysql檢查表 Oracle檢查表

【華為OD題庫-073】字符串變換最小字符串-java

題目 題目描述: 給定一個字符串s,最多只能進行一次變換,返回變換后能得到的最小字符串(按照字典序進行比較)。變換規則:交換字符串中任意兩個不同位置的字符。 輸入描述: —串小寫字母組成的字符串s 輸出描述: 按照要求進行變換得到的最小字符串 備注: s…

Anaconda建虛擬環境并在jupyter中打開

1.假設要用yaml格式創建虛擬環境 從開始里打開anaconda powersheel 輸入以下 conda env create -f environment.yaml conda activate env_name activate以下虛擬環境 修改名稱 如果不用yaml也可以用 conda create --name my_first_env python3.6 這個來指定 2.(base)變(…

C語言 位運算符 + 應用

常用的位運算符 按位與 快速判斷整數的奇偶性 奇數的二進制表示的最低位為1,偶數的二進制表示的最低位為0。 int num 9; if (num & 1) {// num 是奇數 } else {// num 是偶數 }按位異或 交換兩個變量的值 int a 5; int b 7; a a ^ b; b a ^ b; a a ^ …

udemy angular decoration 自存

番外 為什么一個ts文件變成了component,因為它使用了components裝飾器 components is just a class,you export it so angular know how to use it 舉例:組件裝飾器 decoration前總是有一個符號 decoration的作用(之一?) NgModu…

【漏洞復現】獅子魚任意文件上傳漏洞

漏洞描述 獅子魚CMS(Content Management System)是一種網站管理系統,旨在幫助用戶更輕松地創建和管理網站。它具有用戶友好的界面和豐富的功能,包括頁面管理、博客、新聞、產品展示等。 獅子魚CMS使用簡單直觀的管理界面,使得網站所有者可以方便地進行內容的發布、管理和…

深入探索 Java 反射機制

文章目錄 什么是 Java 反射?反射的核心類和接口反射的基本用法獲取 Class 對象的三種方式創建對象實例訪問字段和方法調用構造方法 反射的使用場景注意事項結語 Java反射(Reflection)是指在運行時獲取類的信息,特別是獲取其屬性、…

分享一個用C#寫的Aspose.Words生成word的工具類

公共類 標題樣式 字體大小 margin設置 標題 h1-h6 namespace Common.Bo {public class TitleStyle{/// <summary>/// 標題樣式/// </summary>/// <param name"tag"></param>/// <param name"fontSize"></param>/// &…

使用 Tailwind CSS 完成導航欄效果

使用 Tailwind CSS 完成導航欄效果 本文將向您介紹如何使用 Tailwind CSS 創建一個漂亮的導航欄。通過逐步演示和示例代碼&#xff0c;您將學習如何使用 Tailwind CSS 的類來設計和定制導航欄的樣式。 準備工作 在開始之前&#xff0c;請確保已經安裝了 Tailwind CSS。如果沒…

求小球落地5次后所經歷的路程和第5次反彈的高度

假設一個球從任意高度自由落下&#xff0c;每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地時&#xff0c;共經歷多少米?第5次反彈多高&#xff1f; 數據范圍&#xff1a;輸入的小球初始高度滿足1≤n≤1000 &#xff0c;且保證是一個整數。 輸入描述&#xff1a;輸入…

JavaScript-自定義屬性

自定義屬性 語法&#xff1a; 定義&#xff1a; <div class"box" data-id"666"></div> //獲取&#xff1a; <script>const div document.querySelector(.box);console.log(div.dateset.id);//輸出666 </script>

Node CLI 之 Commander.js (1)

官網地址&#xff1a; https://github.com/tj/commander.js/blob/f1ae2db8e2da01d6efcbfd59cbf82202f864b0c1/Readme_zh-CN.md Commander.js是node.js命令行界面的完整解決方案 開始 新建一個node工程執行 npm install commanderpackage.json中新增代碼添加 #! /usr/bin/env…