兩種架構:
體系結構:是指指令集體系結構。
微體系結構:是指體系結構的具體邏輯實現,不同的微體系結構有不同的流水線設計,不同的分支預測技術。
微體系結構的多樣性使得同一種體系結構能夠不斷的推陳出新,提高微處理器的性能,同時保證代碼的兼容性。
預定義的指令集也叫做指令集體系結構(ISA,Instruction Set Architecture)。
ISA是軟件與硬件之間的接口,程序與處理器之間的接口。
ISA是設計的規范,微處理器是設計的實現。
指令集體系結構(ISA)作為軟件與硬件,程序與處理器之間的一種約定,起着十分重要的作用。使得程序與機器之間可以獨立的發展。
ISA通常要定義一套匯編指令,每一條指令都指定一種操作類型和多個操作數,早期的ISA將操作數放在一個棧結構中,在棧頂操作。
現代多數的ISA將操作數放在多端口的寄存器文件中。
相較於微體系結構,ISA架構為了匹配編譯器和操作系統,一般不會有太大改變。微體系結構每3-5年就會有較大的發展。
CISC的代表,intel和amd的X86,RISC的代表,IBM(power pc),ARM,MIPS
IA-32和X86-32是intel的32位架構,X86-64是AMD開發的針對IA-32的擴展64位架構,IA-64是intel提出的全新的64位架構。
X86表示的是一套向后兼容的指令集,包括32bit,16bit,X86是intel授權給amd,X86-64是amd授權給intel,交叉授權。
X86最初是由intel提出的,在intel接到ibm的訂單后,由於產能限制和ibm的供應鏈擔憂,ibm要求intel將X86的指令授權給了amd和cyrix,
之后amd通過交叉授權解決了和intel的專利問題,cyrix則被via收購,但是仍然只有X86的使用權,之后兆芯收購via,但是並沒有X86的
授權,只有via控股大於兆芯,才有X86的使用權。
馮諾依曼體系結構,不區分數據和指令,指令的地址線,數據線與數據的地址線,數據線,分時復用。
哈佛體系結構,指令存儲和數據存儲分開,每個存儲器獨立編碼,獨立訪問。共有四組數據總線。
改進型的哈佛體系結構,指令與數據共享同一個地址空間,但是緩存是分開的。
哈佛體系結構相較於馮諾依曼,主要解決了程序運行時的瓶頸問題, 馮諾依曼體系結構,流水線中的取指令,取數據,無法並行,
其他的思想並沒有變,指令由操作碼(指明操作類型),地址(指明數據)組成,都按二進制的格式存在存儲器中。
馮諾依曼結構多應用在計算機早期,實現簡單,成本低。但是支持動態程序。
哈佛結構,較復雜,對外圍設備的連接和處理要求高,外圍存儲器的擴展性不高。
目前的計算機,多是cpu內部使用哈佛結構,外部使用馮諾依曼結構。即改進型哈佛結構
超線程技術:CPU在執行單線程任務時,並不是核心的每個單元都在工作,超線程技術就是讓這些閑置的執行單元去做另一個線程的工作。
但是當他們需要同一個特定的執行單元的時候,就沒無法同時執行了,
intel的超線程技術,一般是一核兩線程,IBM的power7有8核32線程,power8有12核96線程。
該技術的瓶頸並不在計算單元,而在調度單元隨着超線程的增加,負擔太大。
高端微處理器設計的步驟:
1):微體系結構設計,為獲得預期的性能而對關鍵技術進行的研究和確定,通常用一個性能模型來進行評估。規定處理器的功能性行為。
性能模型,在時鍾周期的顆粒度上,模擬處理器的行為,計算執行一個測試程序(benchmark)所需要的時鍾周期數目。
2):邏輯設計,通過RTL的verilog代碼描述,設計實現內部主要的模塊以及模塊之間的互聯。
ISA中還有一個內在的接口定義,區別哪些是編譯時靜態完成的,哪些是運行時動態完成的程序。
所有在編譯時由軟件和編譯器靜態完成的任務和優化,被認為是DSI之上的。
所有在運行時,由硬件動態完成的任務和優化,被認為是DSI之下的。
處於DSI之上的軟件和DSI之下的硬件是相互獨立的。
處理器的性能法則:
處理器性能是依據執行一段特殊代碼所需要的時間來衡量的,可以分為三大類:
1):程序需要的指令數;
2):每條指令的時鍾數(Cycles Per Instruction)
3):每個時鍾周期需要的時間;
處理器的性能優化:
1):編譯器優化,減少不必要的冗余代碼,從而減少指令數;
2):使用更為先進的工藝,減少信號傳輸延時,減小機器時鍾周期;
3):增加復雜指令,來減少指令數,但是增加執行部件復雜性,增加指令的時鍾數;
4):深度流水線來減小每條指令的時鍾數(CPI),但是分支預測出錯會使得CPI變大;
目前主要的提升性能的方式還是減小CPI,兩種方法:
1):使用RISC,但是指令數目增加;
2):增加指令流水;
指令級並行處理(ILP):
指令級並行可以定義為多條指令的並行執行,
傳統的串行處理器每次只執行一條指令。
流水線處理器可以重疊執行多條指令,實現指令級並行。
傳統的CISC處理器每處理一條指令,需要10個機器周期,CPI=10
流水線處理器(RISC),通過多條指令的重疊執行,將平均CPI降低到接近1。
標量流水線處理器,在每個周期最多只能發射一條指令。吞吐量在最好狀態,CPI等於1。
超標量流水線處理器,每個周期可以進行多條指令的發射,CPI可以小於1。
標量處理器是一種最簡單的計算機處理器類型,在同一時間內只處理一條數據,標量處理器是一種單指令單數據流(SISD)處理器。
分為復雜指令集CISC(Complex Instruction Set Computing),對編譯器設計要求不高,但是芯片設計復雜,耗電量大。(X86)
精簡指令集RISC(Reduced Instruction Set Computing),需要強大的編譯器使得多個部件並行執行,采用流水線pipeline,
指令亂序out-oder instruction來發揮CPU性能。(包括MIPS/PowerPC/ARM)
向量處理器,也稱為陣列處理器,在科學計算領域應用廣泛。多數商業CPU都包括一些向量處理器指令,如SIMD。
向量處理器早於ILP處理器而商業化,采用一種不同的策略來控制多個深度流水的功能部件,典型的向量操作是兩個64位浮點數據相加得到新的64位的元素向量。
每條向量指令等同於一個循環,可以執行上百次操作,向量間的各個元素計算相互獨立。
標量並行處理器的性能建模:(每個計算中,只有一個處理器處於使用狀態),(由向量處理器和標量處理器組成)
Amdahl定律的效率公式:E = 1-h+h/N,N是機器中處理器的數量,h為進行標量運算的時間片。當h從100%稍微下降一點時,流水線處理器的性能下降的很厲害。
並行處理器的性能模型可以用於流水線處理器,機器並行度N代表流水線的深度,執行過程分為流水線填充階段,完全流水階段,流水線排空階段。
假設流水線一旦停頓,流水線中只存在一條指令,相當於流水線暫停N個時鍾,模型可以簡化為:
其中gi表示流水線中有i條指令的時間片,即流水線停頓(N-i)個周期的時間片。
指令級並行相對於其他的程序段和計算任務的同時處理,稱為”細粒度並行”,為開發ILP設計的處理器稱為ILP處理器。
ILP處理器可以根據一些列參數進行分類:
1):操作延時(OL),指令執行需要的機器時鍾周期數。
2):機器並行度(MP),能夠同時在流水線中運行的最大指令數。
3):發射延遲(IL),一條新的指令初始化后進入流水線。
4):發射並行度(IP),每個時鍾周期內可以發射的最大指令數。
對於4級流水的基准的標量流水線處理器,相對於標量的非流水處理器,流水線處理器獲得了更高的吞吐率。
超流水處理器比基准處理器有着更高的流水度,在超流水處理器中,處理器的時鍾周期比基准處理器短,並定義為“次時鍾周期“,
一個基准處理器的時鍾周期中有m個次時鍾周期。
超流水處理器發射指令的速度比執行的速度要快,每個次時鍾都會發射指令,但是一條指令的執行可能需要m個次時鍾。
從技術上來看,如果傳統流水線處理器需要多個時鍾來執行簡單指令,那應當歸類為超流水處理器。
超流水處理器可以被看作m*k段的深度流水線處理器,某條指令的結果不能被后續的m-1條指令利用。
超標量處理器是基准標量流水線處理器的擴展,IP=n條指令/時鍾周期,流水線深度n*k,具有相同深度的超流水處理器和超標量處理器具有同樣的並行度。
超標量也可以超流水,並行度進一步提高:MP=n*m*k