爲何寄存器比內存快?

計算機的存儲層次(memory hierarchy)之中,寄存器(register)最快,內存其次,最慢的是硬盤。緩存

一樣都是晶體管存儲設備,爲何寄存器比內存快呢?性能

Mike Ash寫了一篇很好的解釋,很是通俗地回答了這個問題,有助於加深對硬件的理解。下面就是個人簡單翻譯。優化

20131f.png

緣由一:距離不一樣

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

以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億倍。指針

事實上確實如此,內存的設計相對簡單,每一個位就是一個電容和一個晶體管,而寄存器的設計則徹底不一樣,多出好幾個電子元件。而且通電之後,寄存器的晶體管一直有電,而內存的晶體管只有用到的纔有電,沒用到的就沒電,這樣有利於省電。這些設計上的因素,決定了寄存器比內存讀取速度更快。內存

緣由三:工做方式不一樣

寄存器的工做方式很簡單,只有兩步:(1)找到相關的位,(2)讀取這些位。工作流

內存的工做方式就要複雜得多:it

(1)找到數據的指針。(指針可能存放在寄存器內,因此這一步就已經包括寄存器的所有工做了。)
(2)將指針送往內存管理單元(MMU),由MMU將虛擬的內存地址翻譯成實際的物理地址。
(3)將物理地址送往內存控制器(memory controller),由內存控制器找出該地址在哪一根內存插槽(bank)上。
(4)肯定數據在哪個內存塊(chunk)上,從該塊讀取數據。
(5)數據先送回內存控制器,再送回CPU,而後開始使用。

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

爲了緩解寄存器與內存之間的巨大速度差別,硬件設計師作出了許多努力,包括在CPU內部設置緩存、優化CPU工做方式,儘可能一次性從內存讀取指令所要用到的所有數據等等。

相關文章
相關標籤/搜索