[小惡魔的電腦教室] 1-3.CPU進階技術講解,XD、VT、SSE在幹嘛
除了一些「數字」規格,比如時脈、快取大小、FSB等等之外,CPU還有「文字」式的規格,這些是隨著CPU發展,逐步加入的特殊功能。它們通常和效能速度無關,卻是相當重要的特色。這裡我們用另一個軟體 CrystalCPUID 來玩,它是類似CPU-Z的軟體,會列出CPU的所有規格,特殊功能的部分甚至比CPU-Z還詳細。
Crystalcpuid會把CPU支援的特殊功能列出來,不可能有CPU可以同時亮起所有功能,因為這些功能一些是AMD獨有,另一些是Intel獨有,大家打開CrystalCPUID看看就知道了。
圖片下方一堆英文縮寫,如SSE、Cool n'Quiet等等,有一些是灰白的,就是CPU的進階功能列表。現在Intel和AMD兩邊的產品都有對應的功能,或許名稱不同,但功用都是一樣的,底下我們就整理成幾大類分別說明。這篇會帶到一些CPU的基本架構,如果寫錯的地方麻煩提出來,我會作出修改,不過考慮到文章難度,裡面的用字和比喻可能不太精確,高手們請見諒(比如SSE的部分,我就不打算寫register的概念)。
1.64位元(EM64T / AMD 64)
首先是前陣子被炒的很熱的64位元,2003年時AMD在Athlon 64率先加入消費端的64位元,Intel也隨後跟進,而在Merom核心的Core Duo筆記型處理器出現之後,Intel和AMD的消費端CPU終於全面64位元。但是,到底什麼是64位元?它有什麼好處?
位元精確度
電腦是以2進位的0與1做計算,1位元(bit)就是2的一次方,也就代表0和1兩種變化,2位元就是四種變化(00、01、10、11),依此類推。而 隨著電腦進步,軟體計算所要求的精確度愈來愈高,因此CPU內部運算的位元數也跟著慢慢提高。32位元是很基本的,這代表一個資料的計算範圍能有四十億種 變化(2的32次方),可以做非常細微變化的運算,也就是精確度相當高。
而前陣子在吵的64位元,其實並「不完全」指64位元運算精度,因為早在N年前CPU內部的浮點運算單元就已經到80位元,而後面會講到的SSE則是128位元。要講64位元,先從CPU內部的運算單元講起。
粗略的分,CPU內部分成「整數」和「浮點數」兩種運算單元,因為運算要求不同,所以一直都是分離的狀態。整數就是1、2、3、4、5,浮點數就是 1.03、2.75781、3.668744這種有小數點的。就算大家的數學都跟我一樣爛,也看的出來浮點數需要比較高的精確度來表達小數點後面的數字, 如果精確度不夠,就代表小數點之後某幾位得被截斷,現實使用就可能某個程式會出錯,因此CPU在20幾年前就導入80位元的浮點運算精確度。
64位元定址
整數這邊就沒這麼要求了,但整數運算單元還得另外負責「記憶體定址」,也就是記錄某個資料是放在記憶體哪邊。32位元的整數單元同時代表「32位元的整數 精確度」和「32位元的記憶體定址」。問題出在後面那個,因為它直接影響CPU所能「看到」的記憶體容量,2的32次方是40億個位址,也就是4GB的容 量。就算記憶體裝超過4GB,32位元的CPU也只能看到4GB,因為它就只能定址到那麼多。
這問題在20年前無關緊要,那時大家還在慢慢熬4MB、8MB的記憶體,但時代進步之後,這問題愈來愈嚴重,首先出問題的就是伺服器,因為他們需要大量的 記憶體來輔助CPU運算,所以歷史上前幾個支援64位元的CPU通通出在伺服器上。而AMD在Athlon 64之後把64位元帶向消費市場,稱為AMD64,隔一年的2004年,Intel也做出回應,在Pentium4中開始加入EM64T。2007年現 在,市場上每一顆CPU都已經支援64位元,除非去二手市場找古董。
64位元之後,記憶體支援的容量「理論上」就高達「170億GB」,這應該足以用到人類殖民織女星,建立銀河帝國。現階段,64位元需要搭配作業系統,由 於實在裝不了那麼多,所以硬體和作業系統都會加入人為的限制。硬體方面,EM64T和AMD64都只支援到40位元的記憶體定址,也就是 1TB(1024GB)的記憶體;軟體上,Windows XP、Linux和Mac OS X的64位元分別支援到128GB、64GB和16GB,Windows Vista的64位元,依版本不同支援從8GB到128GB不等。
按這裡檢視圖片
Windows XP的64位元版,剛出來時大家都嘗鮮灌來玩,結果發現沒什麼差,軟體和驅動程式反而更難找。
64位元作業系統支援的記憶體容量
Linux | 64GB |
Mac OS X | 16GB |
Windows XP Professional x64 Edition | 128GB |
Windows Vista Home Basic | 8GB |
Windows Vista Home Premium | 16GB |
Windows Vista Business | 128GB |
Windows Vista Enterprise | 128GB |
Windows Vista Ultimate | 128GB |
32還是64?
由於現在幾乎已經快買不到「非64位元」的CPU,所以這問題其實是「要不要灌64位元的作業系統」?其實看你的用途,如果你要處理的檔案常常超過 4GB,比如超高解析度的圖檔或超大的影片,預算也夠買4GB以上記憶體的話,那就裝64位元吧!但要確定所用的軟體也支援64位元,雖然64位元的作業 系統也能跑32位元程式,但舊程式一樣只能用4GB以內的記憶體。現在64位元的軟體慢慢變多了,記憶體也不定期崩盤一次,總有一天,大家一定都是64位 元,隨便一台上網機都可能裝4GB的記憶體。。
註:常有人問,為什麼裝了4GB的RAM,Windows XP只能看到3.8GB?消失的200MB是被Windows幹走給系統底層用了,剩下的才給使用者,換裝到64位元版本就沒這個問題了。
2.多媒體指令集(MMX SSE SSE2 SSE3 SSSE3 MMX+ 3DNow!)
標題裡的縮寫你可能認得一兩個,尤其MMX在Pentium時代被宣傳到爛掉,好像加了MMX之後,程式就加快數百倍,使用者腦袋變清楚,考試都考100 分....。呃,總之,標題裡的一堆縮寫雖然不同,但它們想要做的事情幾乎完全一樣,只是隨著時代一直進步,愈做愈厲害,但未來有一天,這些東西或許都不 重要了。
SIMD的概念
前面有說,電腦運算是二進位的方式,32位元代表CPU的運算單元可以抓「一個」32位元的資料,做32位元精確度的計算。問題在於「一次都只能一個」, 有些資料型態天生則是「一組」。比如圖片好了,大家應該知道電腦的顏色是由紅綠藍RGB三原色組成,所以圖片裡每個點至少就有RGB三個資料。當CPU在 處理這種資料時,還是只能拆成一個一個來,而不能一組一組來。由於這種資料型態在多媒體世界中很常見,因此Intel在Pentium首度加入MMX,也 就是大家誏誏上口的「多媒體指令集」。
MMX支援到64位元,但並非只支援單一64位元的資料,它也可以同時運算2個32位元或4個16位元的資料,很適合「一組資料做同一種運算」。比如圖片中的某一點做影像強化,就是單一種指令,運算在整組的RGB三個資料上,這就是SIMD(Single Instruction Multiple Data,單一指令多重資料)的概念,而MMX就是最初的SIMD指令集,用了之後,CPU的多媒體能力就加強了呢!
SSE1~SSE4
AMD看到Intel把MMX捧上天去,就自己在K6 CPU裡弄了3DNow!,MMX只支援整數運算,3DNow!就加入浮點運算,但兩者都一樣是SIMD,同樣鎖定多媒體應用。Intel看到3DNow!又不爽,做出SSE(Streaming SIMD Extensions)支援浮點運算,並拓寬資料支援度到128位元,AMD終於放棄,轉而支援SSE。之後SSE開始自己改版,每一代都增加精確度,並加入更多指令,最新即將出現的是SSE4,只有尚未上市的AMD Barcelona和Intel Penryn才有支援。
現在SSE3已經相當普及,CPU幾乎全數支援,各種多媒體軟體如Photoshop、Winamp、xvid影片解碼器等等也都支援SSE3了。但未來 會如何?我個人覺得這種SIMD指令集的應用會逐漸轉到顯示卡上,因為再快的CPU做多媒體運算,都還不如一張中階的顯示卡。事實上,開發出3DNow! 的人都跑去NVIDIA了,這部分我們到顯示卡的章節再仔細討論。
3.省電技術(SpeedStep/EIST、PowerNow!/Cool n' Quiet)
如果有空的話,不妨用「工作管理員」觀察一下你整天用電腦的CPU佔用率,看真正跑到100%有幾次。通常只有玩遊戲、影片/圖片處理、壓縮檔案有可能會 到100%,瀏覽網頁、MSN、聽音樂、文書處理要讓CPU超過50%都蠻難(就算全部一起做)。如果CPU在沒事幹的時候還以最高速度運作,就等於「白 花油」了,不僅CPU耗電也產生更多廢熱,間接得讓CPU風扇轉更快來散熱,讓整機耗電量上升。現在油價這麼貴,浪費電是不環保的....(好像沒什麼關 係?:p)
所以Intel在Pentium III、AMD在K6-2之後,分別導入類似的省電機制,也就是SpeedStep和PowerNow!,原理也很相似,就是在CPU沒事幹的時候,降低CPU時脈和電壓來省電,如果CPU工作量提高,就立即拉高時脈來應付。到最新的Intel EIST(Enhanced Intel SpeedStep Technology)和AMD Cool n' Quiet都還是基於相同的降頻基礎來省電,只是加入一些新招式。
降倍頻來省電
EIST能把CPU的倍頻降到最低6倍頻,無論它原本是跑多少倍頻,比如Core 2 Duo E4300原本是跑200 x 9 = 1.8GHz,沒事時就會降到200 x 6 = 1.2GHz。所以愈高階、倍頻數愈大的CPU,愈能省更多電,當然這些高階怪獸全速跑起來吃超兇的;EIST另外加入關閉電晶體的功能,Intel雙核 心是共用一塊L2快取,在工作量不高的時候,會關閉沒用到的快取來省電。Windows XP已經內建SpeedStep的功能,不用什麼設定就會自己啟動。
Cool n' Quiet可讓CPU的倍頻最低降到5倍頻,除此之外也會依時脈來調整風扇轉速,所以稱為「冷又安靜」,降低風扇轉速能同時有靜音和省電的效果。可惜Cool n' Quiet沒有內建在Windows裡,得另外裝Athlon 64/FX的Driver,再到XP「控制台」裡的「電源選項」,調到「最小電源管理」才行。不過我之前用Athlon 64的時候覺得這樣實在很麻煩,都是常駐另一個程式RMClock來調整。
按這裡檢視圖片
RMClock是很好用的電壓調整軟體,不用灌什麼Driver就支援Athlon 64系列,當然也支援Intel的CPU。
4.防毒(XD/NX)
顏文字出現了.....
CPU使用記憶體只做為兩種用途,一是儲存資料,二是儲存程式的指令,而XD或NX技術就讓這兩種用途完全隔離,放程式的地方不能儲存資料,反之亦然,放資料的地方不能儲存程式。
在沒有XD或NX技術時,放資料的地方可以同時放程式,這會產生一個很大的漏洞,病毒可以把自己偽裝成資料,然後在原本放資料的地方啟動,寫爆資料區塊, 把其他程式的資料通通蓋掉,造成系統當機,就是好幾年前很出名的「緩衝區溢位」(Buffer Overflow)攻擊,如果大家還有印象的話,2001年的「紅色警戒」(Code Red)蠕蟲就是這種攻擊的代表。
這之後大家就學到教訓了,Intel在消費端CPU加入...呃...XD技術(eXecute Disable,執行關閉),AMD也加入完全一樣,但名稱不同的NX(No eXecute,不淮執行)技術,防毒的方式很簡單,就是在儲存資料的區塊不能執行程式。這需要作業系統搭配,Windows XP以Service Pack 2更新的方式加入這功能,稱為「資料防止制行」(DEP),只要CPU支援XD或NX,這功能就會自動啟動。
按這裡檢視圖片
Windows XP在Service Pack 2之後就多了這個DEP防毒功能,這選項在「我的電腦」按右鍵選「內容>進階>設定(效能部分)>資料防止執行」下面。
5.虛擬化(VT/AMD-V)
最後,也是最難最複雜的「虛擬化」技術,這東西真的虛無縹緲到極點,即使導入虛擬化技術的CPU已經蠻多了,相對應的軟體也已經齊備,但可能是不容易使用,所以只有在伺服器的世界裡比較常見。
用最簡單的解釋,虛擬化可讓一顆CPU「同時」跑多個作業系統,而且都能「直接存取」硬體。現在個人電腦在一般情況下都處於效能過剩的狀態,如果有虛擬化 技術,就可以分割成兩個作業系統,一個拿來上網或文書處理,另一個拿來做多媒體中心,兩個互不干擾,其中一個當機不會影響另一個;或甚至同時跑 Windows和Linux兩種作業系統。
厲害了吧!怎麼弄的?
特權等級
這要從CPU的「特權等級」講起,為了保護系統穩定不當機,現在作業系統和x86 CPU分成四個等級,稱為Ring 0、1、2、3,作業系統的每個部分分別存在於不同的等級,數字愈大,權力就愈小,但愈接近使用者。這是避免一般程式直接存取到硬體,影響穩定度,比如 說,Windows XP下遊戲不能直接存取顯示卡,得透過驅動程式才行,因為遊戲或一般程式都是在最高的Ring 3,而驅動程式在Ring 0,中間得經過特別並保護過的方式來溝通,只有Ring 0才能存取硬體,至於Ring 1和Ring 2則是給作業系統的底層服務用的。
所以,如果要同時跑兩個作業就有點麻煩了,有玩過VMWare、VirtualPC或類似軟體的人大概知道,你可以在這些軟體裡跑多個作業系統,但得先裝 它的特殊驅動程式,這些特殊的「虛擬」驅動程式是用來讓虛擬的作業系統存取,並和真實的裝置連接(比如虛擬網路卡和真實網路卡做橋接,分享網路資源),同 時把虛擬作業系統的所有指令即時轉換到真實作業系統。之所以這麼麻煩,就是因為這些虛擬PC的軟體都是在Ring 3,裡面的虛擬作業系統不能直接存取真實硬體。
在這些軟體裡灌作業系統,看到的硬體絕對不會跟外面真實的硬體一樣。
Ring -1
無論是虛擬驅動程式或即時轉換,都會耗掉CPU的資源,而且無法發揮硬體的真實能力,所以Intel和AMD分別加入VT和AMD-V虛擬化技術,如果你 看的懂上面那段,那下面這段話也就不難理解,這些虛擬化技術就是創造一個全新的特權等級,相當於Ring -1(負1),比Ring 0更底層。
只要在Ring -1等級架一個軟體,然後作業系統灌在這個軟體上,這些作業系統就會都擁有Ring 0的等級,每一個作業系統看到的都是真實硬體,都能發揮100%的硬體能力,同時又不會互相干擾。
至於怎麼把軟體灌在Ring -1,說真的我也不知道,灌完要怎麼切換作業系統我也沒看過。我只知道Xen、VMWare都已經支援VT和AMD-V,但沒有試過,希望有高手能出來解答一下,讓所有人大開眼界。
按這裡檢視圖片
虛擬化技術是新增一個「Ring -1」的層級,夾在傳統Ring 0和硬體之間,讓多個作業系統都有Ring 0控制硬體的權限。
按這裡檢視圖片
Xen是第一個支援CPU虛擬化技術的軟體,不過圖中並非跑虛擬化技術的樣子,而是一般的「部分虛擬化」模樣,透過虛擬驅動程式和指令轉換。
結語
這篇是整個CPU章節裡最難的部分了,接下來就是簡單評論Intel和AMD兩邊陣營的CPU有什麼差異,小罵一下腳位和規格有多麼混亂,都是一些資料整 理而已。如果你看完這篇有什麼不懂,或覺得我有寫錯的地方,歡迎提出來大家一起討論。其實,30年的CPU發展根本不可能在短短三篇裡講完,近代x86 CPU真正的菁華是在內部架構的設計上,那根本就是世界奇觀,也是為什麼Intel Core 2 Duo能反攻AMD Athlon 64的原因,並非規格數字比較強,時脈也沒比較高,支援的特色大家都差不多,但Core 2就硬是比較快,而且還快一大截。這方面的CPU架構解說會更複雜,我就不納入了,有機會的話再另外補完吧。