從CPU談起

CPU的發展史

CPU的工作原理

總的來說,CPU從內存中一條一條地取出指令和相應的數據,按指令操作碼的規定,對數據進行運算處理,直到程序執行完畢為止。


CPU指令周期

指令周期是取出并執行一條指令的時間。指令周期常常有若干個CPU周期,CPU周期也稱為機器周期,由于CPU訪問一次內存所花費的時間較長,因此通常用內存中讀取一個指令字的最短時間來規定CPU周期。

一條指令還是相當復雜的,處理器在一個時鐘周期內肯定是完不成的,可能需要好多個時鐘周期來完成執行。如果這樣讓處理器執行完一條指令,再去執行另一條,處理器的效率是很低的,假如一條指令是5個時鐘周期完成,對于500MHZ的處理器串行運行指令,1秒內取指100000000次。

因此處理器引入了流水線技術,將一條指令劃分為多個功能,由不同的功能部件來執行,并且這些功能部件可以并行工作。


流水線技術

CPU在工作時,需要將一條指令分為多個步驟依次執行(注意硬件不同有可能不一樣),由于每一個步會使用到不同的硬件操作,比如取指時會只有PC寄存器和存儲器,譯碼時會執行到指令寄存器組,執行時會執行ALU(算術邏輯單元)、寫回時使用到寄存器組。為了提高硬件利用率,CPU指令是按流水線技術來執行的,如下:



從圖中可以看出當指令1還未執行完成時,第2條指令便利用空閑的硬件開始執行,這樣做是有好處的,如果每個步驟花費1ms,那么如果第2條指令需要等待第1條指令執行完成后再執行的話,則需要等待5ms,但如果使用流水線技術的話,指令2只需等待1ms就可以開始執行了,這樣就能大大提升CPU的執行性能。

理想情況下,CPU按照流水線執行指令,然而指令流水線除了在資源不足的情況下會卡住之外,指令之間的相關性也是導致流水線阻塞的重要原因。

雖然流水線技術可以大大提升CPU的性能,但不幸的是一旦出現流水中斷,所有硬件設備將會進入一輪停頓期,當再次彌補中斷點可能需要幾個周期,這樣性能損失也會很大,就好比工廠組裝手機的流水線,一旦某個零件組裝中斷,那么該零件往后的工人都有可能進入一輪或者幾輪等待組裝零件的過程。因此我們需要盡量阻止指令中斷的情況,指令重排就是其中一種優化中斷的手段。

指令亂序

指令流水線并不是串行的,并不會因為一個耗時很長的指令在“執行”階段呆很長時間,而導致后續的指令都卡在“執行”之前的階段上。相反,流水線是并行的,多個指令可以同時處于同一個階段,只要CPU內部相應的處理部件未被占滿即可。

然而,這樣一來,亂序可能就產生了。比如一條加法指令原本出現在一條除法指令的后面,但是由于除法的執行時間很長,在它執行完之前,加法可能先執行完了。再比如兩條訪存指令,可能由于第二條指令命中了cache而導致它先于第一條指令完成。

一般情況下,指令亂序并不是CPU在執行指令之前刻意去調整順序。CPU總是順序的去內存里面取指令,然后將其順序的放入指令流水線。但是指令執行時的各種條件,指令與指令之間的相互影響,可能導致順序放入流水線的指令,最終亂序執行完成。這就是所謂的“順序流入,亂序流出”。

CPU的亂序執行并不是任意的亂序,而是以保證程序上下文因果關系為前提的。有了這個前提,CPU執行的正確性才有保證。

相比于CPU的亂序,編譯器的亂序才是真正對指令順序做了調整。但是編譯器的亂序也必須保證程序上下文的因果關系不發生改變。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 1.計算機的發展 計算機的發展包括了硬件和軟件的發展,硬件的發展為計算機提供了更快的處理速度,而軟件的發展為用戶提...
    zoro_1943閱讀 922評論 0 2
  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,125評論 1 32
  • 閱讀經典——《深入理解計算機系統》06 本文,我們要做一件大膽的事情,從零開始實現一個全新的指令集架構,以此深入理...
    金戈大王閱讀 20,832評論 9 53
  • 以下完全為個人總結——若發現問題請下方評論,定回 I/O 主機主頻 50MHz (50M個時鐘周期)/s CPI ...
    pluto_S閱讀 2,608評論 0 2
  • 關于計算機的最小存儲單位 有一篇帖子介紹的非常好為什么計算機最小的存儲單位是字節?而最小到的傳輸單位是bit?我來...
    DeepCode閱讀 2,393評論 0 2