Amdahl定律:
加快某部件執行速度所能獲得的系統性能加速比,受限于該部件的執行時間占系統中總執行時間的百分比。
加速比依賴于:
可改進比例:在改進前的系統中,可改進部分的執行時間在總的執行時間中所占的比例。
部件加速比:可改進部分改進以后性能提高的倍數。
CPU的性能取決于3個參數
時鐘周期時間:取決于硬件實現技術和計算機組成。
CPI:取決于計算機組成和指令集結構。
IC:取決于指令集結構和編譯技術。
并行性的含義:
計算機系統在同一時刻或者同一時間間隔內進行多種運算或操作。即只要在時間上相互重疊,就存在并行性。
同時性:兩個或兩個以上的事件在同一時刻發生。
并發性:兩個或兩個以上的事件在同一時間內發生。?
提高并行性的三種途徑:
時間重疊:引入時間因素,讓多個處理過程在時間上相互錯開,輪流重疊地使用同一套硬件設備的各個部分,以加快硬件周轉而贏得速度。(單機系統:指令流水線(部件專用化) ;多機系統:任務流水線(處理機專用化))
資源重復:引入空間因素,以數量取勝。通過重復設置硬件資源,大幅度地提高計算機系統的性能。(單機系統:硬件冗余,多核CPU,多機系統:集群擴展,重復設置處理機)
資源共享:這是一種軟件方法,它使多個任務按一定時間順序輪流使用同一套硬件設備。如,多道程序。 (單機系統:分時操作系統,虛擬內存: ;多機系統:分布式系統)
相關:兩條指令之間存在某種依賴關系。(靜態屬性)
數據相關:(也稱真數據相關)(RAW: read after write)
對于兩條指令i(在前,下同)和j(在后,下同),如果下述條件之一成立,則稱指令j與指令i數據相關:1,指令j使用指令i產生的結果;2,指令j與指令k數據相關,而指令k又與指令i數據相關。(存在數據流動) (可能需要的數據未產生)
名相關: ?如果兩條指令使用相同的名,但是它們之間并沒有數據流動,則稱這兩條指令存在名相關。(不順序執行可能引起沖突)
控制相關 : 是指由分支指令引起的相關。為了保證程序應有的執行順序,必須嚴格按控制相關確定的順序執行。(分支預測錯誤)
沖突:是指對于具體的流水線來說,由于相關的存在,使得指令流中的下一條指令不能在指定的時鐘周期執行。(動態屬性)
指令級并行主要特點:
是并行性由處理器硬件和編譯程序自動識別和利用,不需要程序員對順序程序作任何修改。( 硬件+軟件技術)
靜態調度 V.S. 動態調度:
靜態調度:是依靠編譯器對代碼進行調度,也就是在代碼被執行之前進行調度;通過把相關的指令拉開距離來減少可能產生的停頓。
動態調度:在程序的執行過程中,依靠專門硬件對代碼進行調度,減少數據相關導致的停頓。
指令順序執行 V.S. 指令亂序執行:
指令順序執行:指令放入流水線的順序和指令完成的順序一致;
指令亂序執行:指令放入流水線的順序和指令完成的順序不一致,也就是說有些指令進入流水線后被阻塞的,而在其后進入流水線的指令先完成了。
動態調度解決控制冒險
動態分支預測技術:通過硬件技術,在程序執行時根據每一條轉移指令過去的轉移歷史記錄來預測下一次轉移的方向。通過提前預測分支方向,減少或消除控制相關導致的流水線停頓。
優點:
根據程序的執行過程動態地改變轉移的預測方向,因此有更好的準確度和適應性。
程序每次執行時,可能預測的分支方向與前次相同或不同。更加靈活.
分支歷史表BHT : 用BHT來記錄分支指令最近一次或幾次的執行情況(成功或不成功),并據此進行預測。?
分支目標緩沖器BTB : 將分支成功的分支指令的地址和它的分支目標地址都放到一個緩沖區中保存起來,緩沖區以分支指令的地址作為標識。
基于硬件的前瞻執行 : 對分支指令的結果進行猜測,并假設這個猜測總是對的,然后按這個猜測結果繼續取、流出和執行后續的指令。只是執行指令的結果不是寫回到寄存器或存儲器,而是放到一個稱為ROB(ReOrder Buffer)的緩沖器中。等到相應的指令得到“確認”(commit)(即確實是應該執行的)之后,才將結果寫入寄存器或存儲器。?
動態調度解決數據冒險
Tomasulo算法 核心思想:
記錄和檢測指令相關,操作數一旦就緒就立即執行,把發生RAW沖突的可能性減少到最小;
通過寄存器換名來消除WAR沖突和WAW沖突。
cache的3C失效:
針對三種類型的不命中的直接方法
針對強制不命中 ?-- ?增加塊大小 (方法一) 缺點:會增加不命中開銷,塊過大會減少Cache中塊的數目,所以有可能會增加沖突不命中。
針對容量不命中 ?-- ?增加Cache容量 (方法二)缺點:增加成本 ; 可能增加命中時間
針對沖突不命中 ?-- ?提高相聯度 (方法三)缺點 : 提高相聯度是以增加命中時間為代價。?
2:1Cache經驗規則
容量為N的直接映像Cache的不命中率和容量為N/2的兩路組相聯Cache的不命中率差不多相同。
其他5個降低Cache不命中率的方法:
偽相聯Cache:在邏輯上把直接映像Cache的空間上下平分為兩個區。對于任何一次訪問,偽相聯Cache先按直接映像Cache的方式去處理。若命中,則其訪問過程與直接映像Cache的情況一樣。若不命中,則再到另一區相應的位置去查找。若找到,則發生了偽命中。否則就只好訪問下一級存儲器。
硬件預取:常由Cache之外的硬件完成指令or數據的預取
編譯器預取:在編譯時加入預取指令,在數據被用到之前發出預取請求。
編譯器優化:通過對軟件進行優化來降低不命中率。1,數組合并 2,內外循環交換 3,循環融合 4,分塊
犧牲cache:在Cache和它從下一級存儲器調數據的通路之間設置一個全相聯的小Cache,稱為“犧牲”Cache(Victim Cache)。用于存放被替換出去的塊(稱為犧牲者),以備重用。
5個降低cache不命中開銷的方法:
多級cache: ..
讓讀不命中優先于寫 : 在讀不命中時,所讀單元的最新值有可能還在寫緩沖器中,尚未寫入主存。我們可以: 推遲對讀不命中的處理,直到寫緩沖器清空 ; 檢查寫緩沖器中的內容,若無相同,且存儲器可用,繼續處理讀不命中
寫緩沖合并 : 如果寫緩沖器為空,就把數據和相應地址寫入該緩沖器。從CPU的角度來看,該寫操作就算是完成了。
如果寫緩沖器中已經有了待寫入的數據,就要把這次的寫入地址與寫緩沖器中已有的所有地址進行比較,看是否有匹配的項。如果有地址匹配而對應的位置又是空閑的,就把這次要寫入的數據與該項合并。這就叫寫緩沖合并。如果寫緩沖器滿且又沒有能進行寫合并的項,就必須等待。?
請求字處理技術 :1, 盡早重啟動:請求字沒有到達時,CPU處于等待狀態。一旦請求字到達,立即送給CPU,讓等待的CPU盡早重啟動,繼續執行。2,請求字優先:調塊時,讓存儲器首先提供CPU所要的請求字。請求字一旦到達,就立即送給CPU,讓CPU繼續執行,同時從存儲器調入該塊的其余部分。(如果:Cache塊較小 or 下一條指令正好訪問同一Cache塊的另一部分 用處不大)
非阻塞cache:采用記分牌或者Tomasulo類控制方式,允許指令亂序執行,CPU無需在Cache不命中時停頓
4個降低cache命中開銷的方法:
使用小容量、結構簡單的Cache
虛擬Cache
Cache訪問流水化
蹤跡cache
局部性原理
?程序執行時所訪問的存儲器地址分布不是隨機的,而是相對地簇聚。
常用的一個經驗規則
程序執行時間的90%都是在執行程序中10%的代碼。
程序的時間局部性
程序即將用到的信息很可能就是目前正在使用的信息。
程序的空間局部性
程序即將用到的信息很可能與目前正在使用的信息在空間上相鄰或者臨近。
馮諾依曼體系結構的特點:
計算機由五大部件組成:存儲器,運算器,控制器,輸入設備,輸出設備。
指令和數據以同等地位存于存儲器,可按地址順序訪問。
指令和數據用二進制表示。
指令由操作碼和地址碼組成。
存儲程序,程序在計算機中順序存放。
以運算器為中心。
計算機系統結構設計和分析中常用的3大原則:以經常性事件為重點,程序局部性原理和Amdahl定律
?