【廣告】
CPU有強(qiáng)大的算術(shù)運(yùn)算單 元,可以在很少的時(shí)鐘周期內(nèi)完成算術(shù)計(jì)算。同時(shí),有很大的緩存可以保存很多數(shù)據(jù)在里面。此外,還有復(fù)雜的邏輯控制單元,當(dāng)程序有多個(gè)分支的時(shí)候, 通過提供分支預(yù)測的能力來降低延了時(shí)。GPU是基于大的吞吐量設(shè)計(jì),有很多的算術(shù)運(yùn)算單元和很少的緩存。同時(shí)GPU支持大量的線程同時(shí)運(yùn)行,如果他們需要訪問同一個(gè)數(shù)據(jù),緩存會(huì)合并這些訪問,自然會(huì)帶來延了時(shí)的問題。盡管有延了時(shí),但是因?yàn)槠渌阈g(shù)運(yùn)算單元的數(shù)量龐大,因此能夠達(dá)到一個(gè)非常大的吞吐量的效果。
用戶態(tài)的CPU,只允許執(zhí)行指令集中的部分指令。一般而言,IO相關(guān)和把內(nèi)存保護(hù)相關(guān)的所有執(zhí)行在用戶態(tài)下都是被禁止的,此外其它一些特權(quán)指令也是被禁止的,比如用戶態(tài)下不能將PSW的模式設(shè)置控制位設(shè)置成內(nèi)核態(tài)。
控制器之所以知道數(shù)據(jù)放哪里、做什么運(yùn)算(比如是做加法還是邏輯運(yùn)算?)都是由指令告訴控制器的,每個(gè)指令對(duì)應(yīng)一個(gè)基本操作,比如加法運(yùn)算對(duì)應(yīng)一個(gè)指令。例如,將兩個(gè)MDR寄存器(保存了來自內(nèi)存的兩個(gè)數(shù)據(jù))中的值拷貝到ALU中,然后根據(jù)的操作指令執(zhí)行加法運(yùn)算,將運(yùn)算結(jié)果拷貝會(huì)一個(gè)MDR寄存器中,后寫入到內(nèi)存。
用戶態(tài)CPU想要執(zhí)行特權(quán)操作,需要發(fā)起系統(tǒng)調(diào)用來請(qǐng)求內(nèi)核幫忙完成對(duì)應(yīng)的操作。其實(shí)是在發(fā)起系統(tǒng)調(diào)用后,CPU會(huì)執(zhí)行trap指令陷入(trap)到內(nèi)核。當(dāng)特權(quán)操作完成后,需要執(zhí)行一個(gè)指令讓CPU返回到用戶態(tài)。除了系統(tǒng)調(diào)用會(huì)陷入內(nèi)核,更多的是硬件會(huì)引起trap行為陷入內(nèi)核,使得CPU控制權(quán)可以回到操作系統(tǒng),以便操作系統(tǒng)去決定如何處理硬件異常。
每核上的多線程CPU都共享該核的CPU資源。
假設(shè)每核CPU都只有一個(gè)"發(fā)動(dòng)機(jī)"資源,那么線程1這個(gè)虛擬CPU使用了這個(gè)"發(fā)動(dòng)機(jī)"后,線程2就沒法使用,只能等待。
所以,超線程技術(shù)的主要目的是為了增加流水線上更多個(gè)獨(dú)立的指令,這樣線程1和線程2在流水線上就盡量不會(huì)爭搶該核CPU資源。所以,超線程技術(shù)利用了superscalar(超標(biāo)量)架構(gòu)的優(yōu)點(diǎn)。