1. 程式人生 > >8.4 主存技術的發展

8.4 主存技術的發展

改進 com 這一 語文 標準 超過 變化 裏的 之間

計算機組成

8 存儲層次結構

8.4 主存技術的發展

技術分享圖片

近些年來SDRAM的標準不斷地升級換代,其性能也得到很大的提升。那為什麽還總是說CPU和內存之間的速度差距越來越大了呢?這一節我們就來探討這個問題。

技術分享圖片

近20年來,流行的內存都采用了SDRAM的結構。需要註意的是雖然平時我們會說以前用SDRAM內存,現在用DDR內存,但這種說法是不規範的。所謂DDR內存也是SDRAM的一種,只不過接口采用了雙倍數據率而已。

那麽有了DDR SDRAM之後,如果要特指之前的SDRAM,可以說是SDR SDRAM。SDR就是單數據率的簡稱。而DDR之後,又有了DDR2,3,4等後續標準。為了區分明確,也把第一代的DDR稱為 DDR1。這些內存規格後面帶的數字,比如這裏的1600,指的是內存接口的等效時鐘頻率。借此我們可以計算出內存的傳輸帶寬。

技術分享圖片

如果按照內存位寬為64比特,由此計算出的內存傳輸帶寬,早期的 PC66 是 0.53GB/s。而到了 DDR3-1600 則達到了12.8GB/s,十幾年裏增長了二十倍之多。

技術分享圖片

然而,很多經典教材和資料中都會提到,近幾十年來,計算機處理器與存儲器的性能差距日益加大,存儲器性能的增長不到十倍。

那這又是怎麽回事呢?這個說法是否有問題呢?

技術分享圖片

之前我們已經學習過,SDRAM的基本單元是一個電容和一個晶體管。對於SDRAM的讀寫最終體現在了對電容的充放電,而要減少這個電容的充放電時間,那是非常困難的。因此,在SDR SDRAM的時代,當時鐘頻率提升到了133MHz之後就很難進一步提升了。

那後來的DDR SDRAM又是如何提升性能的呢?

技術分享圖片

那我們就來看一看內存模組的內部結構。對於一個位寬8比特的SDR SDRAM芯片,每次訪問其內部的存儲陣列都會取出8比特的數據。而同樣位寬的DDR SDRAM芯片,每次訪問存儲陣列則會取出兩倍的數據量。那這16比特的數據是怎麽傳輸的呢?這就要用到雙倍數據率的概念。

技術分享圖片

所謂的雙倍數據率也就是DDR,相對應的是SDR。

SDR是指毎個時鐘的上升沿傳輸數據,接收端也用時鐘的上升沿采樣數據;而DDR則是在時鐘的上升沿和下降沿都傳輸數據,這樣就可以在同樣的時鐘頻率下傳輸雙倍的數據。需要說明的是,DDR指的是一種傳輸方式,運用在SDRAM內存上,就有了DDR SDRAM。但它不僅僅用在內存上,還用在其他很多領域。所以,DDR 只是一種傳輸數據的方式,不能將它等價於我們現在用的內存。

那我們再來看一看DDR SDRAM是如何工作的。

技術分享圖片

先來看看PC100規格的SDR SDRAM。它的存儲陣列的核心時鐘頻率是100MHz,對外接口的時鐘頻率也是100MHz。以讀操作為例,每個時鐘周期從存儲陣列中讀一個數據並送到芯片的接口信號上。從外部看來每個時鐘上升沿傳輸一個數據,單根數據線上的數據傳輸率為100Mbps。

而第一代DDR標準及DDR-200,它的存儲陣列的核心時鐘頻率也是100MHz,但是每個時鐘周期讀出兩個數據。接口的時鐘頻率還是100MHz,但因為在兩個時鐘沿都傳輸數據。所以,仍然在一個時鐘周期內把這兩個數據都傳輸出去了。從外部看來每個時鐘上升沿和下降沿各傳輸一個數據,單根數據線上的數據傳輸率為200Mbps,這也就是DDR-200的名稱由來。

到這裏我們應該發現了一個問題,通常理解的提升內存性能應該是減少讀寫數據的時間。就像我們去圖書館借書,原來辦手續需要十分鐘,現在圖書館說要提升一倍的服務效率,我以為會只要五分鐘了,但是DDR SDRAM的思路卻不一樣。它說,你看這樣好不好?辦手續我們還是保持十分鐘,但你不是要借一本數學書嗎?我現在多給你一本語文書,也就算我們的服務效率提升一倍了。這算不算欺騙消費者呢?咱們稍後再說。即使是保持辦手續還是十分鐘這件事情上,它也沒有做到。

技術分享圖片

這張表列出了SDR到DDR1的各代內存的典型規格。我們看到SDR的核心頻率從 66M 到 100M 再到133M,性能肯定是越來越好了。但是到了DDR1的第一代,也就是DDR-200,它的核心頻率反而下降了,從 133MHz 降到了 100MHz。其實這也容易理解,要從存儲陣列中每次取出雙倍的數據,雖然改動並不大,但對性能還是有影響的。因此,速度也就慢了下來。

那DDR-200相對於PC133到底提升了什麽呢?

技術分享圖片

我們先以對PC133的讀操作為例。大概需要15個納秒進行行選,再用15個納秒進行列選,然後才能得到第一個數據。而與這個數據相鄰的後續數據則可以在每個時鐘周期送出一個,而從發出地址到傳輸完這四個數據總共需要60ns。

我們再來看DDR-200。因為要從存儲陣列中取出雙倍的數據,所以對存儲陣列的訪問變慢了,大概需要20ns的行選,再加20ns的列選,這樣才能得到第一個數據。不過在與這個數據相鄰的後續數據則可以在每個時鐘周期送出兩個。因此,送出這四個數據,大約需要20ns。DDR-200宣稱的 1.6GB/s 的傳輸帶寬就是根據最後這一段20ns送出了四個數據計算出來的。這個指標本身沒有錯,但是評價內存的性能要看兩個指標。這個指標稱為訪存帶寬,是內存廠商大力宣傳的。另一個重要的指標就是讀出第一個數據的時間稱為訪存延遲,因為CPU真正需要的很可能只是第一個數據,所以訪存延遲非常關鍵。這裏DDR-200讀出第一個數據用了40ns,比PC133還慢了10ns。即使是看讀出這四個數據的總時間,它也用了總共60ns,和PC133是一樣的。

因此,DDR-200的性能表現是要比PC133差的。不過,隨著制造工藝的改進到了下一代的DDR-266,情況有了一些改善。

技術分享圖片

DDR-266的核心頻率已經提升到了133MHz,和PC133一樣。但是行選的時間還偏慢一些,這樣讀出第一個數據大約需要35ns,不過連續讀出四個數據的總時間已經比PC133要快一些了,大約是50ns。

技術分享圖片

我們再來看一看行選和列選時間的參數的總表。等到了DDR-400的時候,最短的行選時間已經和PC133一樣是15ns了;而列選也更快了一些,縮短到了10ns。因此,DDR-400的性能要明顯優於PC133了。但是到了這個時候,核心頻率的提升又遇到了困難。那麽怎麽繼續提升內存性能呢?

這就輪到DDR2出場了。

技術分享圖片

既然提升核心頻率有困難,那就再增加預先取出數據的數量。之前是從存儲陣列中取出雙倍的數據,那現在就取出四陪的數據。例如 DDR-400,它的核心頻率只有100MHz,和DDR-200一樣,但因為預取了四個數據,從外界看來數據傳輸率達到了400Mbps。當然這時候單靠雙倍數據率的傳輸也不夠了。所以,它的接口時鐘頻率也提升了一倍,變成了200MHz。這樣上下始終沿都傳輸數據,正好在核心時鐘的一個周期內把四個數據都送出去了。

技術分享圖片

和之前一樣,DDR2的第一代標準的性能也不好,其核心頻率比當時流行的DDR-400要低一半,不但訪存延遲大的多,而且訪存帶寬也是一樣的。所以,DDR2-400的性能表現是全面落後於DDR-400的,很快就被市場淘汰了。隨著制造工藝的改進,DDR2的核心頻率提高之後,性能才逐漸地超過了DDR1。不過它的核心頻率也沒有提高多少。

技術分享圖片

而從DDR2到DDR3的升級,基本上也是一樣的套路。

技術分享圖片

這是內存的行選時間的變化圖,圖中的每一個紅點都是新升級後的第一代。我們可以看出,內存標準的每次升級都會讓行選的時間變長,之後再慢慢地縮短。從SDR SDRAM的最後一代也就是PC133,到後來多年占據主流地位的DDR3-1600十幾年的時間裏行選時間也只是從15ns縮短到了10ns,降低了大約30%。

技術分享圖片

這是內存列選時間的變化圖,情況基本一樣。我們可以看出內存的發展過程,基本上就是以犧牲訪存延遲為代價,努力提高訪存帶寬。訪存帶寬確實有了幾十倍的提升,但是訪存延遲的優化幅度很有限。這是由SDRAM的基本單元結構決定的,也就是那個電容的充放電過程。如果不從材料和結構上做根本的改變,基於現在的SDRAM結構想要優化訪存延遲是很困難的。

技術分享圖片

所以說,從處理器訪存的基本要求來看,讀出一個指定數據所需要的時間確實沒有多少改善,這個說法是沒有問題的。

技術分享圖片

這就是所謂內存性能越來越高的真相。如果我是CPU,我想要的數據你並不能快一點給我,但你卻給了我很多我現在用不著的數,這對性能真的有幫助嗎?從現狀來看肯定是有的,那這樣的幫助是如何實現的呢?這就是我們下一節要探討的問題了。

8.4 主存技術的發展