從CPU談起

CPU的發(fā)展史

CPU的工作原理

總的來說锁摔,CPU從內(nèi)存中一條一條地取出指令和相應(yīng)的數(shù)據(jù),按指令操作碼的規(guī)定识椰,對(duì)數(shù)據(jù)進(jìn)行運(yùn)算處理绝葡,直到程序執(zhí)行完畢為止。


CPU指令周期

指令周期是取出并執(zhí)行一條指令的時(shí)間腹鹉。指令周期常常有若干個(gè)CPU周期藏畅,CPU周期也稱為機(jī)器周期,由于CPU訪問一次內(nèi)存所花費(fèi)的時(shí)間較長功咒,因此通常用內(nèi)存中讀取一個(gè)指令字的最短時(shí)間來規(guī)定CPU周期愉阎。

一條指令還是相當(dāng)復(fù)雜的,處理器在一個(gè)時(shí)鐘周期內(nèi)肯定是完不成的力奋,可能需要好多個(gè)時(shí)鐘周期來完成執(zhí)行榜旦。如果這樣讓處理器執(zhí)行完一條指令,再去執(zhí)行另一條景殷,處理器的效率是很低的溅呢,假如一條指令是5個(gè)時(shí)鐘周期完成,對(duì)于500MHZ的處理器串行運(yùn)行指令猿挚,1秒內(nèi)取指100000000次咐旧。

因此處理器引入了流水線技術(shù),將一條指令劃分為多個(gè)功能绩蜻,由不同的功能部件來執(zhí)行铣墨,并且這些功能部件可以并行工作。


流水線技術(shù)

CPU在工作時(shí)办绝,需要將一條指令分為多個(gè)步驟依次執(zhí)行(注意硬件不同有可能不一樣),由于每一個(gè)步會(huì)使用到不同的硬件操作伊约,比如取指時(shí)會(huì)只有PC寄存器和存儲(chǔ)器姚淆,譯碼時(shí)會(huì)執(zhí)行到指令寄存器組,執(zhí)行時(shí)會(huì)執(zhí)行ALU(算術(shù)邏輯單元)屡律、寫回時(shí)使用到寄存器組腌逢。為了提高硬件利用率,CPU指令是按流水線技術(shù)來執(zhí)行的疹尾,如下:



從圖中可以看出當(dāng)指令1還未執(zhí)行完成時(shí)上忍,第2條指令便利用空閑的硬件開始執(zhí)行,這樣做是有好處的纳本,如果每個(gè)步驟花費(fèi)1ms,那么如果第2條指令需要等待第1條指令執(zhí)行完成后再執(zhí)行的話腋颠,則需要等待5ms繁成,但如果使用流水線技術(shù)的話,指令2只需等待1ms就可以開始執(zhí)行了淑玫,這樣就能大大提升CPU的執(zhí)行性能巾腕。

理想情況下,CPU按照流水線執(zhí)行指令絮蒿,然而指令流水線除了在資源不足的情況下會(huì)卡住之外尊搬,指令之間的相關(guān)性也是導(dǎo)致流水線阻塞的重要原因。

雖然流水線技術(shù)可以大大提升CPU的性能土涝,但不幸的是一旦出現(xiàn)流水中斷佛寿,所有硬件設(shè)備將會(huì)進(jìn)入一輪停頓期,當(dāng)再次彌補(bǔ)中斷點(diǎn)可能需要幾個(gè)周期但壮,這樣性能損失也會(huì)很大冀泻,就好比工廠組裝手機(jī)的流水線,一旦某個(gè)零件組裝中斷蜡饵,那么該零件往后的工人都有可能進(jìn)入一輪或者幾輪等待組裝零件的過程弹渔。因此我們需要盡量阻止指令中斷的情況,指令重排就是其中一種優(yōu)化中斷的手段溯祸。

指令亂序

指令流水線并不是串行的肢专,并不會(huì)因?yàn)橐粋€(gè)耗時(shí)很長的指令在“執(zhí)行”階段呆很長時(shí)間,而導(dǎo)致后續(xù)的指令都卡在“執(zhí)行”之前的階段上焦辅。相反博杖,流水線是并行的,多個(gè)指令可以同時(shí)處于同一個(gè)階段氨鹏,只要CPU內(nèi)部相應(yīng)的處理部件未被占滿即可欧募。

然而,這樣一來仆抵,亂序可能就產(chǎn)生了跟继。比如一條加法指令原本出現(xiàn)在一條除法指令的后面种冬,但是由于除法的執(zhí)行時(shí)間很長,在它執(zhí)行完之前舔糖,加法可能先執(zhí)行完了娱两。再比如兩條訪存指令,可能由于第二條指令命中了cache而導(dǎo)致它先于第一條指令完成金吗。

一般情況下十兢,指令亂序并不是CPU在執(zhí)行指令之前刻意去調(diào)整順序。CPU總是順序的去內(nèi)存里面取指令摇庙,然后將其順序的放入指令流水線旱物。但是指令執(zhí)行時(shí)的各種條件,指令與指令之間的相互影響卫袒,可能導(dǎo)致順序放入流水線的指令宵呛,最終亂序執(zhí)行完成。這就是所謂的“順序流入夕凝,亂序流出”宝穗。

CPU的亂序執(zhí)行并不是任意的亂序,而是以保證程序上下文因果關(guān)系為前提的码秉。有了這個(gè)前提逮矛,CPU執(zhí)行的正確性才有保證。

相比于CPU的亂序转砖,編譯器的亂序才是真正對(duì)指令順序做了調(diào)整须鼎。但是編譯器的亂序也必須保證程序上下文的因果關(guān)系不發(fā)生改變。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堪藐,一起剝皮案震驚了整個(gè)濱河市莉兰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌礁竞,老刑警劉巖糖荒,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異模捂,居然都是意外死亡捶朵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門狂男,熙熙樓的掌柜王于貴愁眉苦臉地迎上來综看,“玉大人,你說我怎么就攤上這事岖食『毂” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長析珊。 經(jīng)常有香客問我羡鸥,道長,這世上最難降的妖魔是什么忠寻? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任惧浴,我火速辦了婚禮,結(jié)果婚禮上奕剃,老公的妹妹穿的比我還像新娘衷旅。我一直安慰自己,他們只是感情好纵朋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布柿顶。 她就那樣靜靜地躺著,像睡著了一般倡蝙。 火紅的嫁衣襯著肌膚如雪九串。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天寺鸥,我揣著相機(jī)與錄音,去河邊找鬼品山。 笑死胆建,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肘交。 我是一名探鬼主播笆载,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼涯呻!你這毒婦竟也來了凉驻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤复罐,失蹤者是張志新(化名)和其女友劉穎涝登,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體效诅,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胀滚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乱投。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咽笼。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戚炫,靈堂內(nèi)的尸體忽然破棺而出剑刑,到底是詐尸還是另有隱情,我是刑警寧澤双肤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布施掏,位于F島的核電站钮惠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏其监。R本人自食惡果不足惜萌腿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抖苦。 院中可真熱鬧毁菱,春花似錦、人聲如沸锌历。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽究西。三九已至窗慎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卤材,已是汗流浹背遮斥。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扇丛,地道東北人术吗。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像帆精,于是被迫代替她去往敵國和親较屿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.計(jì)算機(jī)的發(fā)展 計(jì)算機(jī)的發(fā)展包括了硬件和軟件的發(fā)展卓练,硬件的發(fā)展為計(jì)算機(jī)提供了更快的處理速度隘蝎,而軟件的發(fā)展為用戶提...
    zoro_1943閱讀 909評(píng)論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 閱讀經(jīng)典——《深入理解計(jì)算機(jī)系統(tǒng)》06 本文,我們要做一件大膽的事情襟企,從零開始實(shí)現(xiàn)一個(gè)全新的指令集架構(gòu)嘱么,以此深入理...
    金戈大王閱讀 20,744評(píng)論 9 52
  • 以下完全為個(gè)人總結(jié)——若發(fā)現(xiàn)問題請(qǐng)下方評(píng)論,定回 I/O 主機(jī)主頻 50MHz (50M個(gè)時(shí)鐘周期)/s CPI ...
    pluto_S閱讀 2,576評(píng)論 0 2
  • 關(guān)于計(jì)算機(jī)的最小存儲(chǔ)單位 有一篇帖子介紹的非常好為什么計(jì)算機(jī)最小的存儲(chǔ)單位是字節(jié)整吆?而最小到的傳輸單位是bit拱撵?我來...
    DeepCode閱讀 2,335評(píng)論 0 2