研究生高級計算機體系結(jié)構(gòu)復習總結(jié)
為什么進入多核時代,出現(xiàn)背景原因
衡量處理器性能的主要指標是每個時鐘周期內(nèi)可以執(zhí)行的指令數(shù)(IPC, Instruction Per Clock)和處理器的主頻。因此提高處理器性能就是兩個途徑:提高主頻和提高IPC。
然而,由于處理器的功耗和處理器內(nèi)部的電流、電壓的平方和主頻成正比,而主頻與電壓成正比,因此處理器功耗正比于主頻的三次方。如果通過提高主頻來提高處理器的性能,則處理器的功耗也就越大,這就遇上了功耗墻。提高每個周期內(nèi)執(zhí)行的指令數(shù)是通過指令的并行執(zhí)行來實現(xiàn)。提高并行度有兩個途徑:提高CPU微架構(gòu)的并行度和采用多核架構(gòu)。由于IPC(單位周期內(nèi)執(zhí)行的指令數(shù))與電流成正比,處理器的功耗和處理器內(nèi)部的電流、電壓的平方和主頻成正比,因此CPU由單核變成雙核且主頻不變的情況下,IPC理論上可以提高一倍(兩個CPU共同執(zhí)行),但功耗上也僅僅增加一倍。
Flynn's分類方法
費林分類法(Flynn's Taxonomy),是一種高效能計算機的分類方式。1972年費林(Michael J. Flynn)根據(jù)信息流(information stream)可分成指令(Instruction)和數(shù)據(jù)(Data)兩種。據(jù)此又可分成四種計算機類型:SISD, SIMD, MISD, and MIMD.
注意:費林分類是劃分計算機的,不是劃分CPU的。
單指令流、單數(shù)據(jù)流(SISD)-(ILP)Single Instruction Single Datastream:其指令部件每次只對一條指令進行譯碼,并只對一個操作部件分配數(shù)據(jù)。
單指令流、多數(shù)據(jù)流(SIMD)-(DLP)Single Instruction Multiple Datastream:由單一指令部件控制,按照同一指令流的要求為它們分配各自所需的不同數(shù)據(jù)。
將大量重復設(shè)置的處理單元按一定方式互連成陣列,在單一控制部件CU(Contrul Unit)控制下對各自所分配的不同數(shù)據(jù)并行執(zhí)行同一指令規(guī)定的操作;
數(shù)據(jù)并行;
采用資源重復開發(fā)并行性。
多指令流、單數(shù)據(jù)流(MISD)Multiple Instruction Single Datastream:按 n條不同指令的要求對同一數(shù)據(jù)流及其中間結(jié)果進行不同的處理。沒有商業(yè)實現(xiàn)。
多指令流、多數(shù)據(jù)流(MIMD)Multiple Instruction Multiple Datastream:每個處理器都提取自己的指令,對自己的數(shù)據(jù)進行操作,它針對的是任務(wù)級并行。在任何時鐘周期內(nèi),不同的處理器可以在不同的數(shù)據(jù)片段上執(zhí)行不同的指令,也即是同時執(zhí)行多個指令流,而這些指令流分別對不同數(shù)據(jù)流進行操作。
根據(jù)內(nèi)存的物理分布、邏輯映射、讀取方式將MIMD類并行計算機系統(tǒng)進一步細分為:共享內(nèi)存,虛擬共享內(nèi)存,分布式內(nèi)存;
編程模式:共享內(nèi)存,消息傳遞,混合模式;
緊耦合MIMD(線程級并行TLP)
松耦合MIMD(請求級并行RLP)
CISC、RISC概念和特點,比較優(yōu)缺點
RISC的英文全稱為“Reduced Instruction Set Computer”,中文即“精簡指令集計算機”。RISC構(gòu)架的指令格式和長度通常是固定的(如ARM是32位的指令)、且指令和尋址方式少而簡單、大多數(shù)指令在一個周期內(nèi)就可以執(zhí)行完畢。是一種使用高度優(yōu)化的指令集的微處理器架構(gòu)
二、RISC架構(gòu)的特點
1.RISC架構(gòu)中使用了簡單指令。
2.RISC幫助并支持一些簡單數(shù)據(jù)類型并綜合復雜數(shù)據(jù)類型。
3.RISC利用簡單的尋址模式和固定長度的指令進行流水線處理。
4.RISC允許任何寄存器在任何上下文中使用。
5.單周期執(zhí)行時間。
6.通過分開“LOAD”和“STORE”指令,可以減少計算機可以執(zhí)行的工作量。
7.RISC包含大量寄存器,以防止與內(nèi)存進行各種交互。
8.在RISC中,流水線操作很容易,因為所有指令的執(zhí)行將在統(tǒng)一的時間間隔(即單擊一次)中完成。
9.在RISC中,需要更多RAM來存儲程序集級指令。
10.精簡指令減少了RISC中的晶體管數(shù)量。
11.編譯器用于執(zhí)行轉(zhuǎn)換操作,將高級語言語句轉(zhuǎn)換成其形式的代碼。
三、RISC架構(gòu)的優(yōu)勢
1.RISC(精簡指令集計算)架構(gòu)具有一組指令,因此高級語言編譯器可以生成更有效的代碼。
2.由于其簡單性,它允許自由使用微處理器上的空間。
3.許多RISC處理器使用寄存器來傳遞參數(shù)和保存局部變量。
4.RISC函數(shù)僅使用幾個參數(shù),而RISC處理器無法使用調(diào)用指令,因此,使用易于流水線化的固定長度指令。
5.操作速度可以最大化,執(zhí)行時間可以最小化。
6.所需的指令格式數(shù)量很少,所需的指令數(shù)量和尋址方式也很少。
四、RISC架構(gòu)的缺點
1.通常,RISC處理器的性能取決于程序員或編譯器,因為在將CISC代碼更改為RISC代碼時,編譯器的知識起著至關(guān)重要的作用。
2.在將CISC代碼重新排列為RISC代碼(稱為代碼擴展)時,將會增加大小。并且,此代碼擴展的質(zhì)量將再次取決于編譯器以及機器的指令集。
3.RISC處理器的一級緩存也是RISC的缺點,其中這些處理器在芯片本身上具有大容量的內(nèi)存緩存。為了提供指令,它們需要非??焖俚拇鎯ο到y(tǒng)。
CPU的RISC和CISC架構(gòu)的區(qū)別
RISC和CISC的區(qū)別方面
CISC架構(gòu)的代表: x86, C51
RISC架構(gòu)的代碼:arm, mips,powerpc, avr, pic
指令集的區(qū)別
首先從字面上理解就能知道, CISC(Complex Instruction SetComputer)架構(gòu)的指令數(shù)肯定是遠遠多于RISC(ReducedInstruction Set Computer)架構(gòu)的.另外, RISC架構(gòu)下,不同指令opcode的長度是相等的, 而x86下不同的指令的長度差別很大.
寄存器的區(qū)別
CISC架構(gòu)一般都提供通用寄存器a(x86下為eax),來支持大部分運算指令,但是由于指令太過復雜的原因,并不是所有的寄存器都能支持全部指令的運算,所以匯編代碼中會有各種針對eax的mov操作,影響性能.
指令執(zhí)行所需要的時鐘周期
在CISC架構(gòu)中,不同指令所需要的時鐘周期是不同的(比如乘法和加法的周期就不太可能相同).而RISC架構(gòu)的處理器,大部分的指令都可以在一個時鐘周期內(nèi)完成,這應(yīng)該可以降低指令流水線設(shè)計的復雜度. CISC架構(gòu)的很多復雜指令都通過CPU內(nèi)的微碼來完成, 這樣那些微碼比較復雜的指令就需要多個時鐘周期才能完成. 指令執(zhí)行需要的時鐘周期不同, 會增加指令流水線優(yōu)化的難度.
訪問內(nèi)存的區(qū)別
RISC在結(jié)構(gòu)設(shè)計上是一個載入/存儲(load/store)的構(gòu)架,只有載入和存儲指令可以訪問內(nèi)存,數(shù)據(jù)處理指令只對寄存器的內(nèi)容進行操作。為了加速程序的運算,RISC會設(shè)定多組的寄存器,并且指定特殊用途的寄存器。CISC架構(gòu)則允許數(shù)據(jù)處理指令對內(nèi)存進行操作,因此需要的寄存器數(shù)量會比較少.另外X86架構(gòu)支持cpu對非對齊的內(nèi)存地址的訪問,這在RISC架構(gòu)的處理器中通常會引起CPU產(chǎn)生異常.其實像類似非對齊內(nèi)存地址訪問的功能, X86也是通過CPU內(nèi)微碼來實現(xiàn)的,效率會大大降低.
尋址方式和IO空間
X86架構(gòu)下IO空間和內(nèi)存空間是分開的, IO空間使用完全不同的指令來訪問(in, out). RISC架構(gòu)則不區(qū)分IO空間和內(nèi)存空間,都是直接把IO空間映射到內(nèi)存空間,直接用內(nèi)存空間的訪問方式來操作. RISC架構(gòu)下對于尋址方式同樣做了精簡,幾乎所有的指令都使用寄存器尋址.
編譯的區(qū)別
CISC的指令豐富的優(yōu)勢,使得它的編譯器可以少做很多事情,編譯器的設(shè)計更簡單.而RISC在實現(xiàn)一個功能的時候,需要的指令條目數(shù)會更多一些,程序也會更大.
參考資料:
https://blog.csdn.net/shinezhang86/article/details/48393203
http://www.elecfans.com/emb/danpianji/20171219605119.html
https://www.renrendoc.com/paper/113740963.html
五級流水線(Load指令五個階段)
Ifetch(取指):從指令存儲器取指令并計算PC + 4(指令存儲器、Addr)
Reg/Dec(取數(shù)和譯碼):寄存器取數(shù),同時對指令進行譯碼(寄存器堆讀口、指令譯碼器)
Exec(執(zhí)行):計算內(nèi)存單元地址(擴展器、ALU)
Mem(讀存儲器):從數(shù)據(jù)存儲器中讀出的數(shù)據(jù)寫到主存(數(shù)據(jù)存儲器)
Wr(寫寄存器):將數(shù)據(jù)寫入寄存器中(寄存器堆寫口)
計算機的性能是怎樣描述的、衡量指標、測量方法
典型測量指標有響應(yīng)時間和吞吐率?,F(xiàn)在還考慮加速比、執(zhí)行時間
性能測量基準測試:程序內(nèi)核,玩具程序,合成測試 ,基準測試套件。
? ? 衡量計算機系統(tǒng)性能可采用各種尺度,但最為可靠的衡量尺度是時間。時間可根據(jù)計算方法給以不同的定義,如響應(yīng)時間、CPU 時間等。
響應(yīng)時間是指用戶向計算機系統(tǒng)送入一個任務(wù)后,直到獲得他所需要的結(jié)果所需的等待時間。其中包括了訪問磁盤和訪問主存器時間、CPU 運算時間、I/O動作時間以及操作系統(tǒng)工作的時間開銷等。
影響CPU性能的因素
性能的最本質(zhì)定義:
完成一個任務(wù)所需要的時間;
以指令為基本單位
CPU性能公式
CPU時間:一個程序在CPU上運行的時間(不包括I/O時間)
主頻、時鐘頻率:CPU內(nèi)部主時鐘的頻率,表示一秒可以完成多少個周期
例如,主頻為4.1GHz,表示每秒可以完成 個時鐘周期。
時鐘周期:時鐘周期也稱為振蕩周期,定義為時鐘頻率的倒數(shù)。是計算機中最基本的、最小的時間單位。再一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。CPU的時鐘周期越短,CPU性能越好。
指令周期:取出并執(zhí)行一條指令的時間。
程序的時鐘周期數(shù):平均一個程序執(zhí)行所耗費的時鐘周期數(shù)。
指令周期數(shù)CPI:平均每條指令耗費的時鐘周期數(shù)。
執(zhí)行的指令條數(shù)IC

處理器性能取決于時鐘周期、每條指令的時鐘周期數(shù)(CPI)和指令數(shù)(IC)
單CPU上常見的提高性能的方法和并行計算
提高單個處理器的工作頻率
分層Cache結(jié)構(gòu)
多級流水線(提高CPU頻率的利器)
超標量執(zhí)行(多條流水線并同時發(fā)送多條指令)
亂序執(zhí)行(指令的重排)
單指令流多數(shù)據(jù)流SIMD
超長指令字處理器(依賴于編譯器分析)
多線程并行的優(yōu)點
多線程:是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整體處理性能。
多線程的好處:
創(chuàng)建一個線程比創(chuàng)建一個進程的代價要小很多;
線程的切換代價要比進程切的代價換小很多;
能夠充分利用多處理器;多核情況下可充分利用CPU資源。發(fā)揮多處理器的強大性能,提升資源利用率以及系統(tǒng)的吞吐率。
提供了數(shù)據(jù)共享可能;
具有快速響應(yīng)的特性。
SMT:在一個時鐘周期內(nèi)發(fā)射多個線程的指令到功能部件上執(zhí)行。
參考資料:https://www.cnblogs.com/BRSblackshoot/p/15562346.html
RISC的設(shè)計原則
RISC的設(shè)計原則:
使用頻度很高的指令
大大減少尋址方式
所有指令在一個機器周期內(nèi)完成
擴大通用寄存器個數(shù)
采用硬聯(lián)控制實現(xiàn)
通過精簡指令和優(yōu)化設(shè)計編譯程序,以簡單有效的方式支持高級語言
RISC結(jié)構(gòu)采用的基本技術(shù):
在邏輯上采用硬聯(lián)實現(xiàn)和微程序固件實現(xiàn)相結(jié)合的技術(shù)
在CPU中設(shè)置數(shù)量較大的寄存器組,并采用重疊寄存器窗口的技術(shù)
指令的執(zhí)行采用流水和延遲轉(zhuǎn)移技術(shù)
采用優(yōu)化編譯技術(shù),優(yōu)化寄存器的分配和使用
UMA/NUMA模型
UMA(Uniform Memory Access)模型
物理存儲器被所有節(jié)點共享;
所有節(jié)點訪問任意存儲單元的訪問時間相同;
發(fā)生訪存競爭時,仲裁策略平等對待每個節(jié)點,即每個節(jié)點機會均等;
各節(jié)點的CPU可帶有局部私有高速緩存;
外圍I/O設(shè)備也可以共享,且每個節(jié)點有平等的訪問權(quán)利。
NUMA(Non-Uniform Memory Access)模型
物理存儲器被所有節(jié)點共享,任意節(jié)點可以直接訪問任意內(nèi)存模塊;
節(jié)點訪問內(nèi)存模塊的速度不同,訪問本地存儲模塊的速度一般是訪問其他節(jié)點內(nèi)存模塊
的3倍以上;
發(fā)生訪存競爭時,仲裁策略對節(jié)點可能是不平等的;
各節(jié)點的CPU可帶有局部私有高速緩存;
外圍I/O設(shè)備也可以共享,但對各節(jié)點是不平等的。
Cache一致性
處理器可能在CACHE中看到不同的值:
一致性:確定了讀取操作返回什么值;
連貫性:確定了一個寫入值何時被讀取操作返回。
cache一致性:(coherence)
所有處理器的讀操作必須返回最近寫回的值;
兩個處理器寫到同一位置的值,其順序應(yīng)被所有處理器按序看到;
連貫性:(consistence)
在何種程度上保持一致;
如果一個處理器寫A后再寫B(tài),則所有看到新值B的處理器也必然看到新值A(chǔ);
何種程度的一致是指:一個處理器必須在什么時候看到另一個處理器更新過的值.
MESI Protocols
CPU緩存一致性協(xié)議MESI
MESI 是一種使用廣泛的協(xié)議,用來實現(xiàn) cache coherence 和 memory coherence.
MESI(MModified Exclusive Shared Or Invalid)(也稱為伊利諾斯協(xié)議,是因為該協(xié)議由伊利諾斯州立大學提出)是一種廣泛使用的支持寫回策略的緩存一致性協(xié)議。


參考資料:https://www.cnblogs.com/z00377750/p/9180644.html
SIMD并行的三種結(jié)構(gòu)
SIMD 并行的 3 種體系結(jié)構(gòu)為:向量體系結(jié)構(gòu)、SIMD 擴展和圖形處理單元(GPUs)
(1) 向量體系結(jié)構(gòu)的基本思想:
讀存儲器中散布的數(shù)據(jù)集至“vector registers”;
寄存器操作;
分散結(jié)果存儲至存儲器;
向量體系結(jié)構(gòu)使用一條向量指令開啟一組數(shù)據(jù)操作,其中數(shù)據(jù)的加載、存儲以及數(shù)據(jù)計算以流水線的形式進行。
特點:僅在一組數(shù)據(jù)操作的第一個元素存在存儲器延遲和由冒險引起的停頓,后續(xù)元素會沿著流水線順暢流動。
執(zhí)行時間與三個因素有關(guān):向量長度、結(jié)構(gòu)冒險、數(shù)據(jù)相關(guān)。
(2) SIMD 擴展的基本思想:主要針對多媒體應(yīng)用。
主要進行了3項簡化。
固定了操作中操作數(shù)的數(shù)目:向量體系結(jié)構(gòu)采用向量長度寄存器;
SIMD 擴展沒有復雜的尋址模式:步幅和集中-分散尋址模式;
沒有遮罩寄存器。
實現(xiàn):
操作數(shù)連續(xù)且與存儲地址對齊;
擴展的目的主要為了加速精心編制的庫函數(shù)運行。
(3) 圖形處理單元 (GPUs)的基本思想:
異構(gòu)執(zhí)行模型是 CPU 為主機, GPU 為加
速器;
開發(fā)類C的編程語言;
統(tǒng)一所有的GPU并行為CUDA 線程;
編程模型“SIMT”。
NVIDI GPU架構(gòu):
與向量機類似:擅長數(shù)據(jù)級并行、采用集中-分散尋址模式、具有遮罩寄存器和大的寄存
器組。
與向量機的不同:沒有標量處理器、使用多線程隱藏內(nèi)存訪問延遲以及有很多功能單元
深度流水化。
流水線冒險
什么是冒險? 指流水線遇到無法正確執(zhí)行后續(xù)指令或執(zhí)行了不該執(zhí)行的指令
結(jié)構(gòu)冒險:Structural hazards (hardware resource conflicts):
現(xiàn)象:同一個部件同時被不同指令所使用
如果只有一個存儲器,則在Load指令取數(shù)據(jù)同時又取指令的話,則發(fā)生沖突!
如果不對寄存器堆的寫口和讀口獨立設(shè)置的話,則發(fā)生沖突!
解決辦法:
1.每個部件在特定的階段被用!(如:ALU總在第三階段被用?。?/span>
2.將Instruction Memory (Im)和 Data Memory (Dm)分開
3.將寄存器讀口和寫口獨立開來
數(shù)據(jù)冒險:Data hazards (data dependencies)
現(xiàn)象:后面指令用到前面指令結(jié)果時,前面指令結(jié)果還沒產(chǎn)生。
解決辦法:
1.在硬件上采取措施,使相關(guān)指令延遲執(zhí)行
3.軟件上插入無關(guān)指令
3.利用DataPath中的中間數(shù)據(jù)
4.編譯器進行指令順序調(diào)整
數(shù)據(jù)冒險的解決方法( ( 五個 )
1.硬件阻塞 (stall)
2.軟件插入“NOP”指令
3.編譯優(yōu)化:調(diào)整指令順序
4.合理實現(xiàn)寄存器.堆的讀/寫操作
5.轉(zhuǎn)發(fā)(Forwarding或Bypassing 旁路)技術(shù)。
--若相關(guān)數(shù)據(jù)是ALU結(jié)果,則如何?
可通過轉(zhuǎn)發(fā)解決
-若相關(guān)數(shù)據(jù)是上條指令DM讀出內(nèi)容,則如何?
不能通過轉(zhuǎn)發(fā)解決,隨后指令需被阻塞一個時鐘 或 加NOP指令
控制冒險:Control (Branch) hazards (changes in program flow)
現(xiàn)象:轉(zhuǎn)移或異常改變執(zhí)行流程,順序執(zhí)行指令在目標地址產(chǎn)生前已被取出
解決辦法:
控制冒險 的解決方法(四個)
1.硬件上阻塞(stall)分支指令后三條指令的執(zhí)行;
2.軟件上插入三條“NOP”指令;
3.分支預(yù)測(Predict)
?簡單(靜態(tài))預(yù)測:
-總是預(yù)測條件不滿足(not taken),即:繼續(xù)執(zhí)行分支指令的后續(xù)指令
可加啟發(fā)式規(guī)則:在特定情況下總是預(yù)測滿足(taken),其他情況總是預(yù)測不滿足。如:循環(huán)頂 ? ? ? ? ? ? ? ? (底)部分支總是預(yù)測為不滿足(滿足)。能達65%-85%的預(yù)測準確率
?動態(tài)預(yù)測:
-根據(jù)程序執(zhí)行的歷史情況,進行動態(tài)預(yù)測調(diào)整,能達90%的預(yù)測準確率
注:采用分支預(yù)測方式時,流水線控制必須確保錯誤預(yù)測指令的執(zhí)行結(jié)果不能生 ?
? ? ? 效,而且要能從正確的分支地址處重新啟動流水線工作
4.延遲分支(Delayed branch),通過編譯程序優(yōu)化指令順序。
?把分支指令前面與分支指令無關(guān)的指令調(diào)到分支指令后面執(zhí)行,也稱延遲轉(zhuǎn)移
層次化存儲優(yōu)化方法
6 個基本的 cache 的優(yōu)化方法
1)更大的塊:強制缺失減少;容量和沖突缺失增加,缺失代價增加
2)更大的 cache 容量:缺失率降低;命中時間增加,功耗增加
3)更高的相聯(lián)度:沖突缺失減少;命中時間增加,功耗增加
4)更多級的 cache:內(nèi)存訪問的時間減少了
5)讀缺失優(yōu)先級更高:缺失代價降低
6)緩存索引期間避免地址轉(zhuǎn)換:減少命中時間
10 種高級優(yōu)化方法:
小而簡單的一級緩存;
路預(yù)測;
緩存訪問流水化;
無阻塞緩存;
多種緩存;
關(guān)鍵字優(yōu)先,提前重啟動;
合并寫緩沖區(qū);
編譯器優(yōu)化;
硬件預(yù)?。?/span>
編譯器預(yù)取
動態(tài)預(yù)測
二位的預(yù)測位(畫出兩位預(yù)測狀態(tài)圖):

配置一個從不發(fā)生缺失的Cache,處理器快多少

AMAT

CPI,處理器速率提高


給定程序畫時空圖,找依賴,解決方法

有無遠程訪問,速率快多少

