計算機體系結構 並行性的實現

2021-10-12 12:45:31 字數 3621 閱讀 2581

處理器效能 = 主頻* ipc

處理器時間 = (程式指令數*cpi)/主頻

提公升工作主頻:khz增長到ghz

1)生產工藝提公升

發掘並行處理能力

1)指令流/資料流/執行緒級並行性

2)軟硬體協同

根據flynn分類法,可以將計算機中指令和資料的執行可以分成以下的關係:

misd:沒有實現的案例

simd

現代延伸:

spmd:

mpmd

提高cpu執行指令的吞吐量

ilp的方法:

1)超流水線技術:增加流水線級數

2)多發射機制:增加流水線條數

流水線級數超過8級即為超流水線處理器

增加硬體資源換取處理器效能

採用的是時間並行性

增加發射通路,讓每級流水線都可以同時處理更多的指令,即降低cpi(每條指令執行的週期數)。

該技術要解決多條指令相關衝突,還要core中的各種資源翻倍,實際效率是要大打折扣的

(1)實現的方法

靜態多發射

在執行前,由編譯器複雜封裝多條指令並處理冒險

動態多發射

超標量處理器

(2)超長指令字

以一條指令來實現多個操作的並行執行,減少儲存器訪問,即單指令多操作(多指令)

基本只有cisc可以實現該並行性,risc由於指令位數有限,難以實現

(3)超標量處理器

並行執行的流水線條數稱為超標度

按序發射=》亂序執行=》按序提交

即把相關的解決盡量往後拖延,同時前面指令的等待不影響後面指令繼續前進。

例如:div    $3, $2, $1

add  $5, $4, $3

sub  $8, $7, $6

sub指令的運算元與前面的指令沒有關係,可以在前面指令間的相關引起阻塞而空閒的時候「見縫插針」地提前執行。

要完成上述操作,需要對原流水線作一些改動:

首先,將原解碼階段拆分成「發射」和「讀運算元階段」。發射階段進行指令解碼並檢查結構相關,隨後在讀運算元階段則一直等待直到運算元可以讀取。

處於等待狀態的指令將會被存放在保留站中,也稱為發射佇列,這也是動態排程中的核心部件。保留站的作用是記錄下描繪指令間相關關係的資訊,控制存放的指令執行時間,同時監測每條指令的執行狀態。保留站會在每個時鐘週期選擇一條沒有被阻塞的指令,送往執行邏輯,並退出保留站,該動作稱為發射。

消除war和waw在動態排程時產生的衝突:

1)記分板辦法:保留站判斷出未發射的指令與前面尚未執行完畢的指令存在war和waw相關,就阻塞其發射,直至衝突解決。

2)tomasulo演算法:記錄和控制指令相關,操作一旦就緒就立即執行,把法神raw衝突的可能性減少到最小;通過硬體暫存器重新命名,將出現衝突指令的相關關係記錄下來,有相關的等待,不相關的今早送到功能部件執行。

即可以亂序執行,但是結果提交仍然按程式設計師定的順序提交。

精確異常問題

異常的**包括:外部事件、指令執行中的錯誤,資料完整性問題、位址轉換異常、系統呼叫等。精確異常要求處理器處理完異常後,回到產生異常的地方,還能處理正確。

1)在動態排程中,原先指令執行的先後被打亂,當異常來臨時,指令該如何先後執行?發生異常後面的指令都不能修改機器狀態,萬一這些指令越過發生異常的指令提前執行了,該如何避免?

解決辦法是在流水線中新增乙個重排序緩衝(rob),用來維護指令的有序結束,同時在流水線中增加乙個「提交」階段,用來對已經完成的指令做最後處理,更新某些暫存器狀態。如上圖所示。

rob是乙個先進先出的有序佇列,所有指令在解碼後按程式順序進入佇列尾部,所有執行完畢的指令從佇列頭部按序提交;提交時一旦發現有指令發生異常,則在rob中將該指令及其後面的指令全部清空,也無法提交,也就不會修改機器狀態;發生異常的指令出現在rob頭部時,這條指令前面的指令已經從rob頭部提交並退出了,這些指令對機器狀態的修改都生效了;

總結完整的排程流程

取指:不變

解碼:先解碼後發射

正常解碼後,把操作佇列的指令根據操作型別送至保留站,前提是保留站和rob都有空,並在rob中指定一項作為臨時儲存該指令的結果;發射時讀暫存器的值和結果狀態域,如果結果狀態域指出結果暫存器已被命名到rob,則讀rob

執行:準備好運算元則執行,否則根據結果rob號偵聽結果並接收結果匯流排值

寫回:把結果送至結果匯流排,釋放保留站;rob根據結果匯流排修改相應項

提交:如果佇列中第一條指令的結果已經寫回且沒有發生異常,把該指令的結果從rob中寫回到暫存器或儲存器,釋放rob相應項;若佇列頭的指令發生異常,佇列和rob清空。

上述解決控制相關衝突的解決辦法並不普世,現代處理器普遍採用硬體轉移**機制來解決轉移指令引起的控制相關阻塞。

其基本思路是在轉移指令的取指或解碼階段**出轉移指令的方向和目標位址,並從該位址繼續取指令執行,這樣在猜對的情況下無需阻塞流水線

實現分為兩步:**和確認

**:在取指或解碼階段**轉移指令是否跳轉以及轉移的目標位址,並根據**結果進行後續指令的取指

確認:在轉移指令執行完成後,比較最終確定的轉移條件或轉移目標與之前**的結果是否相同,如果不同則需要取消**後的指令執行,並從正確的目標重新取指執行。

(1)分支**的有效性取決於

**錯誤時,要作廢已經預取和分析的指令,儲存現場

(2)採用分支歷史表bht

採用兩位二進位制位來記錄歷史

(3)採用分支目標緩衝器btb

(4)基於硬體的前瞻執行

對分支指令的結果進行**,並假設該**時對的,然後按**結果繼續取,六吹和執行後續的指令,適用於cpu亂序執行

對tomaslo進行改進可實現前瞻執行

程序:正在執行中的程式

執行緒:程序執行的實體,乙個程序可以分成幾個執行緒。執行緒是直接對cpu資源進行分配。

例如乙個程序需要執行浮點指令和定點數指令,即可以產生兩個執行緒分別由浮點運算部件和定點數運算部件同時執行。

允許單個處理器採用共享執行資源的方法並行執行兩個或多個分離**流(執行緒)的技術。即單處理器可以被虛擬化成多個邏輯處理器。

每個被虛擬化的邏輯處理器都要擁有自己的通用處理器、段暫存器、控制暫存器等。

減少cpu的閒置時間,提高系統的資源利用率

目前,最多使用的是simd和mimd。sisd是現在傳統的單核處理器常用的指令資料執行關係。

simd使用專用的功能單元進行矩陣陣列的鎖步運算(lock-step),常用於科學計算、機器學習、多**訊號處理等。

simd可以將單個指令運用於多個資料的計算,例如將暫存器source1和source2中的某段數進行op,後儲存到destination暫存器中。該過程僅需一條指令就可以完成多組資料的處理。

mimd在不同的資料上執行不同的指令,常用在多核處理器上。

計算機體系結構

計算機體系結構 計算機體系機構指計算機中部件和部件之間的聯絡 一 馮 諾依曼體系 1 計算機處理的資料和指令用二進位制數表示 2 採用儲存程式方式,指令和資料儲存在同乙個儲存器中。3 指令由操作碼和位址組成。操作碼指明指令的操作型別,位址指明運算元和位址。4 以運算器為中心,i o裝置與儲存器間的資...

計算機體系結構

2.計算機體系結構 經典計算機體系結構概念的實質是計算機系統中軟硬體介面的確定,其介面之上的是軟體的功能,介面之下的是硬體和韌體的功能。廣義 現代 的計算機體系結的構概念,它除了包括經典的計算機體系結構的概念範疇 指令集結構 還包括計算機組成和計算機實現的內容。計算機體系結構是程式設計師所看到的計算...

計算機體系結構

首先表示下就剛剛九寨溝發生7級 成都震感強烈 1.記憶體與位址 乙個位址所對應的記憶體單元不能存很多東西,只能存乙個位元組,以前講過的int float等多位元組的資料型別儲存在記憶體中要占用連續的多個位址,這種情況下資料的位址是它所佔記憶體單元的起始位址。2.cpu 處理器是32位的,那麼乙個字就...