為什么寄存器比內存快?

jopen 11年前發布 | 6K 次閱讀 寄存器

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

為什么寄存器比內存快?

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

為什么寄存器比內存快?

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

        原因一:距離不同

        距離不是主要因素,但是最好懂,所以放在最前面說。內存離 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 億倍。

為什么寄存器比內存快?

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

        原因三:工作方式不同

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

        內存的工作方式就要復雜得多:

(1)找到數據的指針。(指針可能存放在寄存器內,所以這一步就已經包括寄存器的全部工作了。)

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

(3)將物理地址送往內存控制器(memory controller),由內存控制器找出該地址在哪一根內存插槽(bank)上。

(4)確定數據在哪一個內存塊(chunk)上,從該塊讀取數據。

(5)數據先送回內存控制器,再送回 CPU,然后開始使用。

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

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!