什麼是計算機的內存寄存器?看完明白了

許多程序的變量比計算機的寄存器要多。因此,編譯器試圖在寄存器中保留最常用的變量,並將其餘的變量保存在內存中,使用負載和存儲來在寄存器和內存之間移動變量。將較少使用的變量(或稍後需要的變量)放入內存的過程稱為溢出寄存器。

什麼是計算機的內存寄存器?看完明白了

與大小和速度相關的硬件原則表明,內存必須比寄存器慢,因為寄存器的數量更少。這個建議確實是這樣的;如果數據是在寄存器而不是內存中,那麼數據訪問就會更快。

此外,數據在註冊時更有用。RISC-V算術指令可以讀取兩個寄存器,對它們進行操作,並寫出結果。RISC-V數據傳輸指令只讀取一個操作數或寫一個操作數,而不需要操作它。

因此,寄存器的訪問時間比內存少,並且具有比內存更高的吞吐量,使寄存器中的數據更快地訪問和更易於使用。訪問寄存器也比訪問內存消耗更少的能量。為了達到最高的性能和節約能源,一個指令集架構必須有足夠的寄存器,並且編譯器必須使用有效註冊的方式。

什麼是計算機的內存寄存器?看完明白了

讓我們把寄存器和內存的能量和性能放到一個透視圖中。假設64位數據,寄存器的速度大約是2015年的200倍(0。25比50納秒),比DRAM的能量效率高1萬倍(0.1比1000 picoj)。這些巨大的差異導致了緩存,這降低了進入內存的性能和能量損失。

什麼是計算機的內存寄存器?看完明白了

考慮到寄存器的重要性,它的增長速度是多少,隨著時間的推移,芯片中的寄存器數量?

1.非常快:它們的增長速度和摩爾定律一樣快,該定律預測每18個月就會將芯片上的晶體管數量增加一倍。

2.非常慢:由於程序通常以計算機的語言分佈,所以指令集體系結構中存在惰性,因此寄存器的數量只會隨著新指令集變得可行而增加。

什麼是計算機的內存寄存器?看完明白了

使用Load和Store示例編譯:

假設變量h與寄存器x2i相關聯,而數組A的基址是在x22中。下面的C分配語句的RISC-V彙編代碼是什麼?

回答:

儘管在C語句中有一個單一的操作,但是現在有兩個操作數在內存中,所以我們需要更多的RISC-V指令。前兩個指令與前面的示例相同,只是這次我們使用適當的偏移量來在荷載寄存器指令中選擇一個8,而add指令在x9中放置總和:

Id x9、64(x22)//臨時reg x9獲得8

添加x9、x21、x9//臨時reg x9獲得h+8

最後的指令把總和存儲為12,使用96(8<12)作為偏移量,並將x22註冊為基本寄存器。

sdx9,96(x22)//存儲h+A 8回到12。

什麼是計算機的內存寄存器?看完明白了


分享到:


相關文章: