什么是CPU中推土機架構
什么是CPU中推土機架構
CPU中推土機架構是什么?聰明的你們有了解過嗎?下面是學習啦小編收集整理關于CPU中推土機架構的資料以供大家參考學習,希望大家喜歡。
CPU中推土機架構
CMP和SMT
CMP:CMP的方式非常直接,簡單來說,CMP是通過“復制”物理核心來擴展處理器在多線程軟件中的性能,這是獲得最佳性能一種最簡單和最有效的方式。但CMP的缺點是制造成本很昂貴,并且也要受到處理器制造工藝的限制,畢竟不能將芯片做的越來越大。并且CMP的方式對負載要求也很高,只有經(jīng)過適當并行優(yōu)化的負載才能充分發(fā)揮CMP的性能,很多核心的CMP常常會浪費資源,在一些應用中,主頻更高、結構更簡單的雙核和四核處理器就往往可以獲得更好的性能。
SMT:SMT是一個相對廉價的技術,比如英特爾的Hyper-Threading,允許每個物理核心運行兩個同步線程。SMT的設計思想是充分利用每個核心的資源。如果一個物理核心只有一個執(zhí)行線程,那么在等待內(nèi)存中的關鍵代碼或數(shù)據(jù)的時候,線程處于停頓狀態(tài),這樣核心的利用率是低下的。而SMT技術允許一個物理核心運行兩個或更多的線程,可以根據(jù)當前的狀況動態(tài)進行切換,如果一個線程處于停頓狀態(tài)等待內(nèi)存,另一個線程的指令則可以使用這個物理核心的所有執(zhí)行單元,讓物理核心利用的更加充分。
為了讓SMT正常工作,處理器的所有代碼和存儲部分需要被復制或分區(qū)。例如,一個雙線程SMT處理器需要兩套架構寄存器和重命名寄存器,一套給線程A,一套給線程B。另外組成指令窗口的共享指令隊列要具備很大的空間,這樣指令窗口才能容納足夠多的來自兩個線程的指令,讓執(zhí)行單元可以保持在忙碌狀態(tài)。最后,兩個線程任何共享單元,比如處理管線不同部分的指令緩存,都不能被任一個線程獨占。換句話說,SMT核心的兩個線程需要和另一個緊密的共享資源,保證核心的緩存單元不會空置沒有線程利用。
推土機架構分析
AMD“推土機”將采用32nmSOI工藝,這讓“推土機”相比“馬尼庫爾”皓龍?zhí)幚砥骺梢栽诓辉黾庸牡那疤嵯略黾?3%的核心數(shù)量、增加50%的吞吐量。與AMD之前所有處理器都有所不同的是,“推土機”采用了“模塊化”的設計,每個“模塊”包含兩個處理器核心,這有些像一個啟用了SMT的單核處理器。每個核心具有各自的整數(shù)調(diào)度器和四個專有的管線,兩個核心共享一個浮點調(diào)度器和兩個128位FMAC乘法累加器。
所不同的,在K10架構中,ALU和AGU共享三個管線(平均1.5個),“推土機”中每個核心整數(shù)單元管線的數(shù)量增加為4個,2個AGU專有、2個ALU專有。L1緩存也有所不同,在K10架構中,每個核心具有64KB L1指令緩存和64KB L1數(shù)據(jù)緩存;而“推土機”每個核心具有16KBL1數(shù)據(jù)緩存、每個模塊具有64KB雙向L1指令緩存,至于減小的L1緩存是否會影響性能還有待觀察。兩個核心共享L2緩存,模塊之間共享L3緩存及北橋。
AMD“推土機”模塊
“模塊”和“核心”,這讓我們不免會產(chǎn)生混淆,實際對于用戶們來說,沒必要去刻意的關注“模塊”的概念,這只不過是AMD在設計上的稱謂,而當產(chǎn)品投放市場的時候,依舊會以核心數(shù)量為標識,比如我們說采用推土機架構的“Interlagos”服務器處理器具有16個核心,而不會說是8個模塊。對于為何采用這種“模塊”設計的主要原因,AMD表示是“為了減少CPU的冗余電路”。
如果采用CMP的方式,隨著核心數(shù)量的增加,CPU的核心面積也會越來越大,重復的電路也會越來越多,功耗也會隨之增加——因為CMP是采用復制核心的方式。而采用“模塊”設計可以大大減少冗余電路,這對核心的大量增加很有意義。比如“推土機”,兩個核心共享浮點部分,對于大部分服務器應用來說,整數(shù)運算的部分要遠遠高于浮點運算(高性能計算除外),所以將浮點執(zhí)行單元共享并不會影響大多數(shù)應用中的性能。而整數(shù)部分則不是共享的,否則會造成瓶頸。
上文我們回顧過CMP和SMT設計的特點,我們可以把AMD“推土機”架構看做是介于這兩種之間的一種設計:兩個線程(核心)共享浮點執(zhí)行單元,但是各自具有獨立的整數(shù)執(zhí)行資源。這看上去像是SMT的另一種形式,或者說是經(jīng)過AMD改良的一種“AMD式的第三種方式”。但與傳統(tǒng)的SMT設計不同,SMT僅僅復制的是核心的存儲部分,一個線程一個存儲模塊(registerfile),而AMD“推土機”架構中,每個線程復制的是完整的整數(shù)執(zhí)行單元硬件,一個線程具有一個存儲模塊(registerfile)和一組完整的整數(shù)執(zhí)行單元。
猜你喜歡: