1. 程式人生 > >為什麽寄存器比內存快?

為什麽寄存器比內存快?

chunk 使用 內存管理 設置 很多 流程 努力 出了 iphone

計算機的存儲層次(memory hierarchy)之中,寄存器(register)最快,內存其次,最慢的是硬盤。
  技術分享圖片  


  相同都是晶體管存儲設備,為什麽寄存器比內存快呢?

原因一:距離不同

  距離不是主要因素,可是最好懂,所以放在最前面說。內存離CPU比較遠。所以要耗費更長的時間讀取。


  以3GHz的CPU為例,電流每秒鐘能夠振蕩30億次。每次耗時大約為0.33納秒。

光在1納秒的時間內,能夠前進30厘米。也就是說。在CPU的一個時鐘周期內。光能夠前進10厘米。

因此。假設內存距離CPU超過5厘米。就不可能在一個時鐘周期內完畢數據的讀取。這還沒有考慮硬件的限制和電流實際上達不到光速。相比之下,寄存器在CPU內部,當然讀起來會快一點。
  距離對於桌面電腦影響非常大。對於手機影響就要小得多。手機CPU的時鐘頻率比較慢(iPhone 5s為1.3GHz)。並且手機的內存緊挨著CPU。

原因二:硬件設計不同

  蘋果公司新推出的iPhone 5s,CPU是A7。寄存器有6000多位(31個64位寄存器,加上32個128位寄存器)。而iPhone 5s的內存是1GB,約為80億位(bit)。

這意味著。高性能、高成本、高耗電的設計能夠用在寄存器上,反正僅僅有6000多位,而不能用在內存上。

由於每一個位的成本和能耗僅僅要添加一點點,就會被放大80億倍。


  其實確實如此,內存的設計相對簡單,每一個位就是一個電容和一個晶體管。而寄存器的設計則全然不同,多出好幾個電子元件。並且通電以後,寄存器的晶體管一直有電,而內存的晶體管僅僅實用到的才有電,沒用到的就沒電,這樣有利於省電。

這些設計上的因素,決定了寄存器比內存讀取速度更快。

原因三:工作方式不同

  寄存器的工作方式非常easy。僅僅有兩步:(1)找到相關的位。(2)讀取這些位。
  內存的工作方式就要復雜得多:
  (1)找到數據的指針。(指針可能存放在寄存器內。所以這一步就已經包含寄存器的所有工作了)

  (2)將指針送往內存管理單元(MMU),由MMU將虛擬的內存地址翻譯成實際的物理地址。

  (3)將物理地址送往內存控制器(memory controller)。由內存控制器找出該地址在哪一根內存插槽(bank)上。
  (4)確定數據在哪一個內存塊(chunk)上。從該塊讀取數據。
  (5)數據先送回內存控制器,再送回CPU,然後開始使用。


  內存的工作流程比寄存器多出很多步。每一步都會產生延遲。累積起來就使得內存比寄存器慢得多。

  為了緩解寄存器與內存之間的巨大速度差異。硬件設計師做出了很多努力。包含在CPU內部設置緩存、優化CPU工作方式。盡量一次性從內存讀取指令所要用到的所有數據等等。

為什麽寄存器比內存快?