PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 電腦硬體討論群組 > 系統組件
帳戶
密碼
 

  回應
 
主題工具
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離線中  
oly
Amateur Member
 

加入日期: Sep 2004
文章: 48
超純量管線 與 多媒體指令集

[超純量管線 Super-scale Pipeline]
晶片製程的提升不只是讓元件的反應變快,連帶的讓CPU晶片能塞入更多的元件。

如何讓多出來的元件數量也能幫助提升效能呢?

多出來的元件除了增加暫存器跟快取來提高資料命中率,
還能多開幾條生產線。

Intel 在 Pentium CPU 中加入了所謂超純量管線 (Super-scale Pipeline)的設計,
使用 64bits 的資料匯流排(Data Bus),跟兩條管線,
最好的情況可以在一個時脈同時執行兩個指令。(每條管線處理32bits運算)
前端有一個“排程單元”用來判斷抓進來的指令能不能同時執行,
再根據簡單的判斷將指令往兩條 pipeline 裡頭丟,
大幅降低管線中的出錯機率。


這個方法有點像是以量來換取效能,
生產線越多條,對效能越會有幫助,不過這跟加深管線不同的是,這是用電晶體數換來的,會直接反應到成本與製作難度上。

而且還有一個問題就是,生產線多一倍,效能並不會多一倍,
這跟排程單元的能力有關,優秀的排程可以讓每條生產線都能充分被利用到,
但是生產線越多條,排程要考慮的問題越多,
因為必須往後抓取更多指令來填生產線,但是如果排程單元花太多時間判斷,
就會讓效能變得很差。
所以在排程單元能力有限的情形下,生產線越多條利用效率會越差。


以有名的 AMD Athlon (K7) 處理器來說,
就算擁有當時相當優秀的排程單元,與令人驚異的9組超純量管線,
但在CPU滿載時,所有運算單元的平均使用率依然不到3成。



[多媒體指令集與 SIMD (Single-Instruction Multiple-Data)]
所以伴隨著超純量管線技術的,還有多媒體指令集。
當初 Pentium 出現後沒多久,就出現了支援 MMX 指令集的 Pentium MMX 處理器,
MMX 指令集提供 64bits 的暫存器與相關整數運算指令,
具有單一指令能夠平行處理2筆32bits,4筆16bits,或是8筆8bits資料,
充分利用了兩組超純量管線(碰到 MMX 指令連排程的工夫都省了)。

如果程式使用了這類指令集,就等於告訴了CPU哪些東西是可以同時處理的,
也不用擔心排程排錯,可以提高管線使用率,提高程式運作效率,一舉數得。

後來的 3D Now!,SSE,SSE2,SSE3,…等多媒體擴充指令集,
也都有單一指令同時處理多筆資料(SIMD)的能力(也支援浮點數計算)。

不過能平行處理的資料還是以多媒體用途居多,
因為這類指令不大量連續使用的話,對效能提升並不明顯,
很多情形下還是得靠排程單元來撐CPU的資源使用率。

接下篇....
 

此文章於 2005-08-22 05:18 AM 被 oly 編輯.
舊 2005-08-22, 04:56 AM #2
回應時引用此文章
oly離線中  
oly
Amateur Member
 

加入日期: Sep 2004
文章: 48
HT/SMT, SMP

[Hyper-Thread]
管線深度與數量越高,CPU的利用效率就越低,
因此雖然用了兩倍數量的電晶體,但是可能只換來兩成的效能提升,
不如將這些電晶體拿去做第二顆 CPU,兩顆使用率高的CPU聽起來不錯,
但是要注意的是,這樣的加速意義已經跟先前不一樣了。

在單一CPU的角度來看,提升效率就等於 一件工作能在更短時間內完成。
但從多CPU角度來看,提升效率等於 一定時間內能完成更多工作。
兩者有什麼不一樣?
這不得不提到作業系統層次的執行緒(thread)與排程(跟CPU指令層次的排程不同),

在多工環境下,每個程式會被OS以一個或多個執行緒看待,進行排程與資源分配,每個執行緒都有需要被執行的指令,而OS則負責管理每個執行緒何時可以使用 CPU。OS 必須知道有多少CPU資源可以使用,以及如何妥善地讓每個執行緒進入CPU完成工作。

這邊必須提到,OS只知道CPU忙或不忙,並沒辦法知道CPU內部真正的使用率,我們從OS看到的CPU使用率僅僅是估計來的。

當OS將工作一筆一筆交給CPU時,CPU只看得到一個個指令,
內部還是會經過自己的排程來讓使用率提高。


雖然CPU的排程單元已經盡力了,不過還是有很多閒置的部分。

要是能夠讓 OS 將其他執行緒的工作也叫過來一起排隊的話
(不同執行緒通常是不相干的,基本上都能平行處理,就算有同步問題也是OS那邊要解決掉,等於是OS已經幫忙排好大半了),
CPU的排程功力相當於翻了兩倍,就能更進一步讓CPU使用率提高。

Intel 的 Hyper-Thread 技術就是利用這個方法,來減少CPU內閒置的單元,
雖然無法讓單一執行緒比較快被完成(其實應該甚至會慢些),
但是卻能減少所有執行緒的總等候時間,讓同一時間內能做的工作更多,
整體來講,效能是有實質提升的。

如果是兩個實體CPU的話,大概就是像這樣

不過多顆實體CPU還有很多架構上的議題,多半跟資料同步有關,
這方面我不是很熟,可以的話就請其他板友補完

謝謝收看

此文章於 2005-08-22 05:12 AM 被 oly 編輯.
舊 2005-08-22, 05:01 AM #3
回應時引用此文章
oly離線中  
Tatebayashi
Advance Member
 

加入日期: Jan 2004
您的住址: 台中
文章: 446
好文~幫推
感謝大大精闢的言論
多少可以讓自己知道CPU的一些知識

第一篇是在說P4嗎...(重置需要花更多的時間)
感覺上有點像是在談跟P4相關CPU的架構
__________________
ゆコクゲサ期待ウサ..
ゆコパ勘違ゆウサ...
ゆコろヘろ希望メ持コソゾビバギ...
クろヘ..ゆコネザパ...
優ウゆ女ソ子ゾ嫌ゆク
舊 2005-08-22, 08:35 AM #4
回應時引用此文章
Tatebayashi離線中  
fox3nova
Senior Member
 
fox3nova的大頭照
 

加入日期: Apr 2005
您的住址: 亞利安
文章: 1,219
好文必推∼讓小弟增長了不少∼
__________________
  
舊 2005-08-22, 09:51 AM #5
回應時引用此文章
fox3nova離線中  
saturnman
Basic Member
 

加入日期: Oct 2001
您的住址: 台北市
文章: 12
好文章∼蠻簡單易懂的說明,推∼
舊 2005-08-22, 09:57 AM #6
回應時引用此文章
saturnman離線中  
cicaca
Senior Member
 

加入日期: Aug 2002
您的住址: 台北
文章: 1,014
寫的清楚啊
每天都有新知識
待會更仔細的研究一下
舊 2005-08-22, 10:30 AM #7
回應時引用此文章
cicaca離線中  
五哥
Regular Member
 

加入日期: Apr 2005
文章: 78
不錯的文章,收獲很多
舊 2005-08-22, 10:39 AM #8
回應時引用此文章
五哥離線中  
my755
Junior Member
 
my755的大頭照
 

加入日期: May 2004
您的住址: 修得文武藝, 賣與帝王家
文章: 770
讚喔~~講解的簡單.....
__________________
舊 2005-08-22, 10:54 AM #9
回應時引用此文章
my755離線中  
kioko
Power Member
 

加入日期: Mar 2004
文章: 552
圖文並茂,深入淺出的好文章
感謝大大分享知識!!
舊 2005-08-22, 10:59 AM #10
回應時引用此文章
kioko離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是04:06 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2024。