![]() |
||
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)。 加上管線越深碰到這種情形的機會越大(因為工作線上未完成的指令越多), 所以當付出的代價高於提升的效率時,效能會不升反降。(而且重置就相當做白工,浪費能源) 接下篇...
__________________
6. [DIY] 螢幕實際顯示大小模擬小程式,[新版本 ] 5. [DIY]已經不袖珍了的 Cmoy 耳擴 4. [豆知識]CPU 技術名詞解釋 3. [DIY]袖珍型 CMoy 耳擴,[ 測試報告 ] [RMAA ][2號機 ] 2. [測試]緯創 9500PRO 1. [DIY]TV-OUT 延長模組 |
|||||||
![]() |
![]() |
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的資源使用率。 接下篇....
__________________
6. [DIY] 螢幕實際顯示大小模擬小程式,[新版本 ] 5. [DIY]已經不袖珍了的 Cmoy 耳擴 4. [豆知識]CPU 技術名詞解釋 3. [DIY]袖珍型 CMoy 耳擴,[ 測試報告 ] [RMAA ][2號機 ] 2. [測試]緯創 9500PRO 1. [DIY]TV-OUT 延長模組 此文章於 2005-08-22 05:18 AM 被 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還有很多架構上的議題,多半跟資料同步有關, 這方面我不是很熟,可以的話就請其他板友補完 ![]() 謝謝收看
__________________
6. [DIY] 螢幕實際顯示大小模擬小程式,[新版本 ] 5. [DIY]已經不袖珍了的 Cmoy 耳擴 4. [豆知識]CPU 技術名詞解釋 3. [DIY]袖珍型 CMoy 耳擴,[ 測試報告 ] [RMAA ][2號機 ] 2. [測試]緯創 9500PRO 1. [DIY]TV-OUT 延長模組 此文章於 2005-08-22 05:12 AM 被 oly 編輯. |
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Jan 2004 您的住址: 台中
文章: 446
|
好文~幫推
感謝大大精闢的言論 多少可以讓自己知道CPU的一些知識 第一篇是在說P4嗎...(重置需要花更多的時間) 感覺上有點像是在談跟P4相關CPU的架構
__________________
ゆコクゲサ期待ウサ.. ゆコパ勘違ゆウサ... ゆコろヘろ希望メ持コソゾビバギ... クろヘ..ゆコネザパ... 優ウゆ女ソ子ゾ嫌ゆク |
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Apr 2005 您的住址: 亞利安
文章: 1,219
|
好文必推∼讓小弟增長了不少∼
|
![]() |
![]() |
Basic Member
加入日期: Oct 2001 您的住址: 台北市
文章: 12
|
好文章∼蠻簡單易懂的說明,推∼
|
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Aug 2002 您的住址: 台北
文章: 1,014
|
寫的清楚啊
每天都有新知識 ![]() 待會更仔細的研究一下 ![]() |
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Apr 2005
文章: 78
|
不錯的文章,收獲很多
|
![]() |
![]() |
Junior Member
![]() ![]() ![]() 加入日期: May 2004 您的住址: 修得文武藝, 賣與帝王家
文章: 770
|
讚喔~~講解的簡單.....
__________________
![]() |
![]() |
![]() |
Power Member
![]() ![]() 加入日期: Mar 2004
文章: 552
|
圖文並茂,深入淺出的好文章
![]() 感謝大大分享知識!! |
![]() |
![]() |