瀏覽單個文章
oly
Amateur Member
 

加入日期: Sep 2004
文章: 48
[豆知識] CPU 技術名詞解釋

在板上逛了好幾年,看到CPU技術年年有新花樣,
因為本身是讀資訊相關類別的,所以難免對這些比較有興趣
不過因為這類知識學校跟課本的介紹不多,
很多部分還是靠自己收集各方資料整理推敲出來的,
所以如果有任何錯誤或缺漏,還請大家不吝指教

接下來要提幾項CPU相關技術之前,
還是不免要一路看看CPU的演進歷程,
才能從 “為什麼要有這種設計?”“這種設計能改善什麼?” 的角度,
知道各種技術的由來與用途。

下面這張圖是最基本的 CPU 運作流程,

藍色圓是代表一個一個基本指令,所有電腦上運作的程式都是由這種指令組成,
以上圖的例子來看,每4ms可以執行一個基本指令,相當於一秒可以執行250個指令。(4ms 只是舉例,沒有特殊意義。)

[管線 Pipeline]
如果可以將基本指令再細分成更小的工作單位,
以加法舉例 : ADD EAX, 5 (將暫存器 EAX 的值 + 5 後存回 EAX)
可以拆成
1. 讀取 EAX 的值 跟 5
2. 相加
3. 存回 EAX

這樣的好處是,原本必須要一個基本指令執行完後,才能再執行下一個基本指令,
拆成小工作單位後,當第一個基本指令完成第一項小工作後,
第二個基本指令就能先進來執行第一項小工作。

這種方式就像是工廠的生產線一樣,所以這項技術就稱為 Pipeline (管線)

下圖是將第一張圖的工作方式拆成兩個工作單位 (2階管線)

由於每個小工作單位都比原本整個大工作簡單,所以花費時間也較短(2ms),
整體來看就變成每隔2ms 就能執行一個工作,相當於每秒能執行 500 個指令。


像下圖將每個工作階段花費時間都降到 1ms 以下的話,
甚至能在一秒內執行1000個指令了,效率整整是原始方法的4倍。

照這個方式來看,如果能將管線(pipeline)不斷加深,
不就能夠不斷降低每個工作階段花費的時間,大幅提高工作效率了嗎?

如果生產線都不發生 “意外” 的話,這個理論是成立的,
但是其實我們執行的指令中,有時候會發生下面的情形:
ADD EAX, 5
ADD EAX, 6
當第二個指令要讀取 EAX 時,第一個指令卻還沒做完 (正在 +5),
這時候EAX的值是不能用的,所以第二個指令進入 Pipeline 就會出錯。

解決方法就是將第二個指令重置,等第一個指令將 EAX 計算好後,
再讓第二個指令重新進入pipeline。

下圖就是一個例子

從上圖還可以發現一點,就是當管線越深(工作分越細),一旦需要重置就會付出越多代價(cost)。
加上管線越深碰到這種情形的機會越大(因為工作線上未完成的指令越多),
所以當付出的代價高於提升的效率時,效能會不升反降。(而且重置就相當做白工,浪費能源)

接下篇...
     
      
舊 2005-08-22, 04:50 AM #1
回應時引用此文章
oly離線中