計(jì)算機(jī)的存儲(chǔ)層次(memory hierarchy)之中,寄存器(register)最快,內(nèi)存其次,最慢的是硬盤。
同樣都是晶體管存儲(chǔ)設(shè)備,為什么寄存器比內(nèi)存快呢?
Mike Ash寫了一篇很好的解釋,非常通俗地回答了這個(gè)問題,有助于加深對硬件的理解。下面就是我的簡單翻譯。
原因一:距離不同
距離不是主要因素,但是最好懂,所以放在最前面說。內(nèi)存離CPU比較遠(yuǎn),所以要耗費(fèi)更長的時(shí)間讀取。
以3GHz的CPU為例,電流每秒鐘可以振蕩30億次,每次耗時(shí)大約為0.33納秒。光在1納秒的時(shí)間內(nèi),可以前進(jìn)30厘米。也就是說,在CPU的一個(gè)時(shí)鐘周期內(nèi)(0.33納秒),光可以前進(jìn)10厘米。
濤聲依舊注:每次震蕩的耗時(shí)也就是CPU的時(shí)鐘周期,時(shí)鐘周期為震蕩頻率的倒數(shù)。
因此,如果內(nèi)存距離CPU超過5厘米,就不可能在一個(gè)時(shí)鐘周期內(nèi)完成數(shù)據(jù)的讀取,這還沒有考慮硬件的限制和電流實(shí)際上達(dá)不到光速。相比之下,寄存器在CPU內(nèi)部,當(dāng)然讀起來會(huì)快一點(diǎn)。
距離對于桌面電腦影響很大,對于手機(jī)影響就要小得多。手機(jī)CPU的時(shí)鐘頻率比較慢(iPhone 5s為1.3GHz),而且手機(jī)的內(nèi)存緊挨著CPU。
原因二:硬件設(shè)計(jì)不同
蘋果公司新推出的iPhone 5s,CPU是A7,寄存器有6000多位(31個(gè)64位寄存器,加上32個(gè)128位寄存器)。而iPhone 5s的內(nèi)存是1GB,約為80億位(bit)。
這意味著,高性能、高成本、高耗電的設(shè)計(jì)可以用在寄存器上,反正只有6000多位,而不能用在內(nèi)存上。因?yàn)槊總€(gè)位的成本和能耗只要增加一點(diǎn)點(diǎn),就會(huì)被放大80億倍。
事實(shí)上確實(shí)如此,內(nèi)存的設(shè)計(jì)相對簡單,每個(gè)位就是一個(gè)電容和一個(gè)晶體管,而寄存器的設(shè)計(jì)則完全不同,多出好幾個(gè)電子元件。
并且通電以后,寄存器的晶體管一直有電,而內(nèi)存的晶體管只有用到的才有電,沒用到的就沒電,這樣有利于省電。
這些設(shè)計(jì)上的因素,決定了寄存器比內(nèi)存讀取速度更快。
原因三:工作方式不同
寄存器的工作方式很簡單,只有兩步:
(1)找到相關(guān)的位
(2)讀取這些位。
內(nèi)存的工作方式就要復(fù)雜得多:
1.找到數(shù)據(jù)的指針。(指針可能存放在寄存器內(nèi),所以這一步就已經(jīng)包括寄存器的全部工作了。)
2. 將指針?biāo)屯鶅?nèi)存管理單元(MMU),由MMU將虛擬的內(nèi)存地址翻譯成實(shí)際的物理地址。
3. 將物理地址送往內(nèi)存控制器(memory controller),由內(nèi)存控制器找出該地址在哪一根內(nèi)存插槽(bank)上。
4.確定數(shù)據(jù)在哪一個(gè)內(nèi)存塊(chunk)上,從該塊讀取數(shù)據(jù)。
5. 數(shù)據(jù)先送回內(nèi)存控制器,再送回CPU,然后開始使用。
內(nèi)存的工作流程比寄存器多出許多步。每一步都會(huì)產(chǎn)生延遲,累積起來就使得內(nèi)存比寄存器慢得多。
為了緩解寄存器與內(nèi)存之間的巨大速度差異,硬件設(shè)計(jì)師做出了許多努力,包括在CPU內(nèi)部設(shè)置緩存、優(yōu)化CPU工作方式,盡量一次性從內(nèi)存讀取指令所要用到的全部數(shù)據(jù)等等。
-
寄存器
+關(guān)注
關(guān)注
31文章
5325瀏覽量
120052 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3004瀏覽量
73900
原文標(biāo)題:為什么寄存器比內(nèi)存快?
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論