我個人認為,「記憶體」一直是價格效能比最高的升級方案。雖然CPU會直接影響電腦的執行速度,但要讓速度明顯成長得花不少錢,通常要連主機板一起換,而換張主機板差不多就是重組半台電腦了(把主機板拆出機殼再裝一張新的進去,讓我死了吧!)。可是記憶體沒幾個月就崩盤一次,以目前的價格,投資個1000多元,多加1GB的記憶體,跑多一點軟體就會感覺有差了,保証值得,勸敗小惡魔推薦!

在電腦幾十年來的歷史裡,系統主記憶體用的規格已經換了好幾次,EDO DRAM、FP RAM、DDR SDRAM....。甚至不同的零件組裡也有不同記憶體,CPU內部的快取其實是SRAM,顯示卡上有特性迥異的GDDR。看起來超亂,但請忘了前面那堆英文吧!因為綜觀來看,這些記憶體的用途都一樣,它就是給處理器做為運算時暫存資料的地方,只是隨著時代進步而改良規格,或因應他們輔助的對象不同,而特化成具備不同的屬性。


記憶體的外觀

在進一步講規格之前,先來瞧瞧現在常見的DDR跳舞機....嗯,DDR記憶體,雖然說也沒什麼好看的,就是一條長長的電路板,上面裝了幾顆小小黑黑的晶片。



普通記憶體的包裝盒,大多是一包兩支,上面密密麻麻寫滿數字,每個數字都有意義,因為記憶體的種類會有不同,下一篇再來解讀PC3-8500之類的數字。



1.散熱片:有些記憶體是針對超頻而設計,或單純只是為了美觀酷炫,所以加上散熱片。

2.記憶體顆粒:實際存放資料的記憶體晶片,上面會印生產顆粒的廠商,顆粒因晶片封裝方式不同,尺寸有大有小。一般記憶體兩面都有顆粒,當然也有只放一面的,不過常聽到的單面記憶體、雙面記憶體,跟顆粒實體放置的方式並沒有關係,並不是說顆粒兩面都有放就叫雙面記憶體。單雙面是指Rank數(以前叫Bank),這是記憶體邏輯上的配置,而非實體上的,下一篇再仔細討論。

3.SPD:Serial Presence Detect,這是一個小小的唯讀記憶體,記錄記憶體的廠牌和各項參數,讓電腦可以自動抓出記憶體的各項參數值,算是記憶體的隨插即用功能。

4.防呆凹槽:記憶體有不同的種類,有些金手指數目相同,為了避免裝錯,會設一個這樣的凹槽,以凹槽的位置來做安裝的防呆,主機板上的插槽也有對應的突起,硬塞是塞不進去的。(但真的用力硬塞還是可以,再次提醒,現在電腦裝置都有防呆設計,不能很順的插入,通常就是插錯,千萬別硬塞,別當一個連防呆設計都防不了的呆子。)

5.金手指:傳輸資料的金手指,資料進出記憶體就是靠這個。

6.安裝卡榫:主機板的記憶體插槽兩旁會有固定桿,扣上就會把記憶體鎖緊,而這也是另一個防呆裝置,不同種類的記憶體,卡榫的凹槽位置會不一樣。不過還是看金手指上的凹槽位置比較準。



附上一張之前用過的主機板照片,記憶體插槽中間有個突起就是對應防呆凹槽。



記憶體的用途


這裡先講系統記憶體就好,當你在Windows裡執行程式,軟體用到的資料就會載入到記憶體,因為硬碟的機械馬達結構太慢了,必須用晶片式的記憶體才足以跟上CPU的速度。但就算你軟體一直開、一直開,同時跑BT、eMule、10個Word、20個Excel、30個IE視窗、看A級好片、做3D繪圖還一邊聽音樂,把你的256MB的記憶體塞到爆炸,你電腦也不會突然就死掉(好像有語病,因為這樣玩的話Windows可能真的會突然死掉),只是會變超慢,因為超過記憶體容量的部分就會進入硬碟,成為「虛擬記憶體」,劃分硬碟空間當成記憶體的延伸,而硬碟的速度相對於記憶體實在太慢了(每秒數GB vs. 每秒數十MB)。所以才說增加記憶體是C/P值很高的升級方案,因為這讓你可以很順的看A...咳!很順的執行大量程式。

我們先不管記憶體的種類和DDR的實際/有效時脈的差別,只聊記憶體兩個最重要的規格:「時脈」(Clock)和「時序」(Timing),和它們各自衍生的兩個重要特性:「頻寬」(Bandwidth)和「延遲」(Latency),之後無論看到什麼記憶體,只要看這幾個規格就能知道它的特性。

至於容量,雖然理論上是越大越好,不過有時受到作業系統定址的限制,你裝過多的記憶體容量就會變得毫無意義了。舉例來說,在早期的DOS時代,當時的作業系統的記憶體定址能力雖然理論上可以達到2^16(16位元) = 64MB,但是受到DOS本身設計上的影響,必須要加掛另外的驅動程式,DOS(或軟體)才能使用超過1MB以上的記憶體。而現在的32位元作業系統(Windows XP或Vista的32位元版本),記憶體的定址能力理論上的最大值為2^32(32位元) = 4GB,所以你如果安裝超過這個容量的記憶體,實際上也是毫無意義的。如果你想要讓超過4GB容量的記憶體可以發揮效用的話,那只能轉換到64位元的作業系統了。

由於記憶體的特性沒有「照片」可看,所以下面一律用插圖表示,並以現在主流的DDR SDRAM做介紹,因為DDR記憶體目前廣泛用在系統主記憶和顯示卡上的記憶體,已經被淘汰、不常見、或特殊用途的記憶體就先省略了。


時脈與頻寬

記憶體也有時脈,但和CPU的意義不同。對於處理器來說,MHz或GHz時脈就是處理器在一秒內可以執行幾「百萬次」或「十億次」,但記憶體就像硬碟一樣,只是儲存資料的地方,差別只是記憶體無法永久儲存,必須不斷充電來維持資料,但相同的是它和硬碟一樣都沒有「運算能力」。記憶體的時脈,影響的是記憶體「資料進出的速度」和「內部找資料的時間」。

先談「資料進出的速度」,我們可以把記憶體的傳輸通道想像成一條高速公路,上頭的車子就是數位資料,如同下面的插圖。




資料進出記憶體時,公路只能橫排一定數量的車子,傳輸通道會有一定的寬度,也就是「每一次可傳的資料量」,就現在系統主記憶體來說是64位元的寬度。而時脈則是「每秒可以傳幾次」,800MHz的記憶體就是每秒800百萬次的傳輸,每次傳輸64位元的資料。因此我們就能計算出「記憶體頻寬」(Memory Bandwidth),也就是寬度乘上時脈,變成每秒的資料傳輸量,以800MHz為例就是每秒6.4GB的頻寬。

64位元(傳輸寬度)*800MHz(時脈)/ 8 = 每秒 6400 MB

註:1 Byte等於8 bit,除8是讓bit位元變成Byte位元組

無論哪種記憶體,頻寬都是這樣計算,系統記憶體和顯示卡上的記憶體都是一樣的算法,或許寬度或時脈不一樣,但頻寬的意義都是相同的,它就是處理器讀取或寫入記憶體時的資料傳輸速度。現在最新的系統記憶體標準是1333MHz,頻寬約10GB/s左右。


時序和延遲

如果常逛論壇,常會看到大大級玩家寫一些像密碼的記憶體規格,比如「DDR2-800MHz / 3-3-3-10」之類的,800MHz前面已經談過,而這個「3-3-3-10」指的是記憶體時序,也就是記憶體找資料所花的時間,從收到CPU的需求開始,到即將送出資料前各個步驟所花的時間。

記憶體是CPU暫存資料的地方,資料不可能像垃圾一樣亂丟,一定得有組織式的管理,而對人類來說,最直覺的整理方式就是像書架,記憶體裡資料排列的方式就像多層書架,如底下的插圖:



記憶體裡資料的排列就是直覺的行列式,分成橫排(Row,行)和縱排(Column,列),每一小塊就是1位元的資料。圖中是5行4列的排列,真實的記憶體有數千以上的行列,這裡取一小部分來解說。


當面對塞滿書的書架時要怎麼找書?一定是給一個精確的位置,比如第幾層、左邊數過來第幾本,而CPU讀寫記憶體資料也是一樣,CPU會送出一個記憶體位址,裡面有行和列的位址資訊,記憶體收到之後就要開始找資料了,而就像人找書要時間,記憶體找資料也要時間,這個時間就是「時序」,也就是記憶體找資料的「延遲」。

以下是記憶體找書...呃,找資料的過程:


1.行列位置解碼

記憶體的行和列各有一個位址解碼器,CPU送來的位址會拆成行和列,各自送到行與列的解碼器,由解碼器負責找資料。


2.行位址啟動

首先啟動的是行位址,解碼器會啟動整行的記憶體資料,啟動之後,這一行的資料都可以被存取。


3.列位址啟動

再來是啟動列位址,有了之前的行位址,加上列位址之後就能定位到資料的所在,而抓到的資料就會送出。


資料送出之後,以上的步驟就重來一次,但如果之後的資料還是在同一行裡,那只要再送出列位址就能抓到資料,不需要重新啟動行,原本被啟動的那一行裡面的資料可以不斷的被存取,直到CPU不需要那一行為止,這時記憶體就會關閉那一行,啟動另外一行找資料。而以上所有啟動、尋找通通都要時間,也就是記憶體的「時序」規格,因此從CPU送出指令要存取某個資料,直到資料真的送出為止,中間會有「延遲」。由於CPU得不斷存取記憶體當暫存空間,每一次存取產生的延遲會影響效能,所以低延遲的記憶體才會特別貴,而瘋狂玩家整天就想壓低延遲,來增進整體效能。

時序的單位是時間,也就是「時脈週期」(Clock Cycle),一個時脈週期就是晶片跑一次動作所需要的時間,就記憶體來說,如果實體時脈是800MHz(每秒跑800百萬次),那「每跑一次」所需的時間就是1/800000000秒,這時該記憶體就會被稱為1.25ns(奈秒,1/1000000000秒)的記憶體。


註:要快速計算記憶體的時脈週期,就拿1000除以MHz的實體時脈,得出來的數字單元就是ns,同理,有ns規格想知道實體時脈,拿1000除以ns值就是實體時脈。


四大時序值
記憶體有非常多的時序值,而像3-3-3-10這種達文西密碼,就是標示出記憶體最重要的四個時序值,意義如下:



一般記憶體的時序值,通常會標示成這樣的四個數字,每個數字都代表一種時序延遲。


1.tCAS(Column Address Select):列位址送出,到資料取得之間的時間。
2.tRCD(RAS to CAS Delay):送出行位址之後,到送出列位址之間的時間。
3.tRP(RAS Precharge):關閉一行,到重新啟動另一行之間的時間。
4.tRAS(Row Address Select):啟動一行需要的時間。


其中tCAS就是CAS Latency(CAS延遲),簡稱CL值,這是記憶體最最重要的時序值,很多玩家或廠商甚至只提記憶體的時脈和CL值。雖然存取記憶體需要啟動「行」和「列」,但某一行被啟動之後,該行所有的資料都可以被存取,因此tRAS頗重要,但多次下來CL值會最重要,因為同一行的資料通常都是CPU所需的,而CL值是每次抓列裡面的資料都會產生的延遲,累積下來相當於是CPU對記憶體的讀取延遲,非常非常重要。



拿CPU-Z看一下,在「Memory」的部分就會有系統記憶體目前的時脈與時序值,圖中的數值抄下來就是5-5-5-14。



「SPD」的部分則是顯示記憶體SPD的內容,一款記憶體通常會有幾種設定值可以選,高時脈配高時序,低時脈配低時序,「Timings Table」下面就是時脈所對應的時序值。


註:CPU-Z只會顯示記憶體的「實體時脈」,而非DDR後的「有效時脈」。

時脈和時序誰比較重要?

由於CPU架構是設計成超高速計算少量、一個接一個的資料,對記憶體的存取很頻繁,但一次的量並不大(相對於和CPU特性相反的顯示晶片而言),如果資料沒有立即進入CPU,CPU的運算單元就得等資料回來。當然,現在CPU都導入超級先進的機制來防止閒置的發生(運算單元一需要等待,就立刻換執行別的東西,等資料到了再切回來算;或是CPU內建大型快取保留住常用資料),但記憶體的延遲對CPU仍然非常重要,愈低愈好。

但這並不是說時脈就不重要,因為時序的單位是時脈週期,而不是時間,時脈愈高,一個時脈週期就愈短,1066MHz CL=4的記憶體,事實上比667MHz CL=3的延遲還要短,即使它的CL值比較大,但換算到時間後才是真正的延遲時間差。一條記憶體通常會有好幾組設定值存在SPD裡,高時脈就會有配上比較高的時序值,低時脈就配低時序,一增一減之下,可能高時脈的時序延遲還是比較長,但犧牲一點點延遲,換來的是時脈所直接影響的頻寬。而記憶體頻寬,在雙核心或多核心之後重要性會慢慢提升,因為多核心同時運作下,CPU一次要抓的資料量越來越大了。

頻寬和延遲對不同架構的處理器會有不同的影響,CPU對延遲比較敏感,依時脈不同,CL值也不同,但一般不會超過10;而顯示晶片則非常需要記憶體頻寬,時序就沒那麼重要,高速的顯示記憶體CL值都破2位數。在大家還沒頭昏腦脹之前,這篇就到此打住,下一篇來看現在主流的DDR記憶體種類,DDR1、DDR2、DDR3和雙通道的意義。