【廣告】
程序的運(yùn)行過(guò)程,實(shí)際上是程序涉及到的、未涉及到的一大堆的指令的執(zhí)行過(guò)程。當(dāng)程序要執(zhí)行的部分被裝載到內(nèi)存后,CPU要從內(nèi)存中取出指令,然后指令解了碼(以便知道類型和操作數(shù),簡(jiǎn)單的理解為CPU要知道這是什么指令),然后執(zhí)行該指令。再然后取下一個(gè)指令、解了碼、執(zhí)行,以此類推直到程序退出。
因?yàn)镃PU有大量的緩存和復(fù)雜的邏輯控制單元,因此它非常擅長(zhǎng)邏輯控制、串行的運(yùn)算。相比較而言,GPU因?yàn)橛写罅康乃阈g(shù)運(yùn)算單元,因此可以同時(shí)執(zhí)行大量的計(jì)算工作,它所擅長(zhǎng)的是大規(guī)模的并發(fā)計(jì)算, 計(jì)算量大但是沒(méi)有什么技術(shù)含量,而且要重復(fù)很多次。這樣一說(shuō),我們利用GPU來(lái)提高程序運(yùn)算速度的方法就顯而易見(jiàn)了。使用CPU來(lái)做復(fù)雜的邏輯控制,用GPU來(lái)做簡(jiǎn)單但是量大的算術(shù)運(yùn)算,就能夠大大地提高程序的運(yùn)行速度。
用戶態(tài)CPU想要執(zhí)行特權(quán)操作,需要發(fā)起系統(tǒng)調(diào)用來(lái)請(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就沒(méi)法使用,只能等待。
所以,超線程技術(shù)的主要目的是為了增加流水線上更多個(gè)獨(dú)立的指令,這樣線程1和線程2在流水線上就盡量不會(huì)爭(zhēng)搶該核CPU資源。所以,超線程技術(shù)利用了superscalar(超標(biāo)量)架構(gòu)的優(yōu)點(diǎn)。