# Ch.5-1 Memory Hierarchy
###### tags: `Computer Organization`, `計算機組織`
## Memory Technology
電腦中的記憶體有很多種,最主要的是random access memory(RAM)
特性:不管存取的位址在哪裡,存取的時間都一樣。
還有其他儲存裝置,像是:
- magnetic disk用機械的方式讀寫
- SSD跟USB的用快閃磁碟flash disk
### SRAM, Static Random Access Memory
優點:非常快
缺點:很貴,單位面積儲存的bit數較少(density低)、耗電高
特性:
1. 用電晶體做成
2. 供電屬於static。穩定供電,定期消耗電量才導致耗電高
3. 記憶體位址不會分割。只要有位址,直接到記憶體中存取
4. 用在CPU中的cache
### DRAM, Dynamic Random Access Memory
優點:便宜、低耗電、單位面積可儲存的bit數多(density高)
缺點:慢
特性:
1. 用電容做成
2. 供電屬於dynamic。有個**refresh**的機制,會定期給記憶體充放電(因為是電容做的)
3. 會將記憶體分割成row/column address,所以要經過row access跟column access才能存取到實際要用的資料(因為要求高密度,所以用二維的方式組成)
4. 用在main memory
## DRAM
### Array Architecture
DRAM是二維的陣列結構,先存取位址的高位元得知row後,再存取低位元得知column

```
下面舉例
```

```
高位元的部分進行row decode
會從四個橫排中選出一個
每個row上又有4個bit
再用低位元進行column decode
從4個bit選出其中一個
因為總共有4*4=16個,可是最後只會選出一個
所以叫做16*1
```

:::info
$4M=2^{22}$
所以4M總共有22條線,可以分成高低位元各11bit
:::
```
由address中高位元的11bit=2048個row中,指定一個row
然後再從這個row包含的address低位元11bit形成的2048個column找出資料
總共有2048*2048=4M個,只會取出一個
所以是4M*1
```
### DDR SDRAM
現在用的DRAM通常是DDR(Double Data Rate)
像使用flip-flop時,只會選擇clock的正緣<font color=red>或</font>負緣其中之一來觸發
而double data rate就是正負緣"都"可以觸發
換句話說,就是**0→1跟1→0都可以傳遞/接收資料**
相當於單位時間內可以執行的量倍增,throughput就能上升

:::info
左邊是1980-2012年的DRAM容量跟價格演進的表格
右邊是縱軸為存取速度、橫軸為年份的DRAM演進圖
可以發現近年來,DRAM有容量上升,價格下降的趨勢
row的存取速度(紅色)在過去與column的存取速度(藍色)的比值差不多:$250/150=1.66667$
近年來,row的速度卻遠慢於column的速度了:$35/0=\infty$
:::
:::danger
所以開始研究**最佳化row跟column access的速度**問題!
:::
## SRAM
SRAM的一個bit要由6個電晶體組成,且每個電晶體的大小都有玄機
有的要比較小,有的大,有的適中,才可以組成一整個完整的SRAM。
### SRAM Cell

```
運作:有點像DRAM
把word line設為1後,左右兩個名為med的NMOS電晶體就會通電
能將中間電晶體所儲存的資料經由bit line流出
由於一個電晶體不小,又要6個電晶體才可以組成一個SRAM
所以SRAM才會體積大、單位面積儲存bit數少,density低
且因為供電屬於static,資料是鎖在電晶體中,要一直通電,維持電晶體運作保存資料
因此存取資料很快
```
### Compare with DRAM
因為DRAM要分成row access跟column access,所以比較慢
但是只要用一顆電容就可以做好,所以單位面積儲存bit數多
:::info
因此,需要大容量的時候選擇DRAM
需要速度時,選擇SRAM
:::
## Why Memory Hierarchy?
### Technology Trends

```
(logic可以直接視為SRAM)
從圖中發現,容量部分,SRAM、DRAM、硬碟的成長幅度相當
但是速度成長的幅度就出現差距
```
### Processor Memory Latency Gap

```
上面的線代表CPU的效能,下面代表DRAM的效能
可以發現CPU成長的幅度非常大,DRAM相較起來非常小
為了不想要發生處理器一直在等待記憶體的狀況
想要一個容量大、速度快、便宜的記憶體
於是Memory Hierarchy就誕生了
```
## Memory Hierarchy
:::danger
**KEY POINT**:
讓處理器盡可能的存取比較快的記憶體
少用的資料就放到比較大,但是比較慢的記憶體
:::
1. upper level:距離CPU近的地方,速度快、容量小
2. lower level:距離CPU較遠的地方,速度慢、容量大
memory hiecrchy做的是把不常用的資料放到lower level
如果處理器要用到lower level裡面的資料,就把它搬到upper level
使得處理器可以用比較快的速度存取到資料
- **Block**:要被移動的資料的最基本單位(每次要移動,就是移一個或多個block)
### Principle of Locality
**★**所謂的`90/10 rule`或`80/20法則`
一般的程式中,其實只有$10-20%$的code主宰整個程式$80-90%$的運作(如迴圈)
所以只要顧好那$10-20%$的優化,就可以收穫$80-90%$的成效
1. Temporal locality:如果有一個資料被存取到,他在不久後的將來有可能再次被存取--令比較常用的資料放在離CPU近的地方
2. Spatial locality:如果有一個資料被存取到,附近的資料可能是接著要被存取的資料--把連續的資料放到離CPU近的地方
### Levels of Memory Hierarchy

```
越上面如register越快、越小,越接近CPU,就是upper level
越下面如硬碟、磁碟,越慢、越大,離CPU越遠,就是lower level
常用資料就要讓他盡量留在高的地方,以提升系統效能
```
### Hierarchy Managed
講述不同層級的儲存單元要製造出memory hierarchy的管理單位
1. Registers <-> Memory
由compiler或是programmer做到
compiler是我們寫高階語言的時候,由compiler自行決定
programmer則是寫組語的時候,programmer判斷何時移動記憶體跟暫存器的資料
2. cache <-> memory
由硬體做到,就是所謂的cache controller
後面將會討論cache controller的設計
3. memory <-> disk
透過硬體跟作業系統或是programmer
硬體跟OS就是所謂的virtual memory虛擬記憶體,後面也會詳談
programmer則可以決定什麼東西要放在檔案中,透過<font color=blue>開檔、讀取的動作</font>就可以寫入記憶體
### Memory Hierarchy Terminology
一些名詞介紹
#### Performance of main memory
* Latency:影響快取記憶體存取時的miss penalty(cache中沒找到,就要改去memory找,花費的時間會變多)
1. access time:送出要求到實際拿到資料的時間
2. cycle time:連續兩筆資料要存取時,中間應相差的時間
* Bandwidth:一次可以搬移多少資料(視CPU跟memory之間的bus決定)
```
ps.硬碟、磁帶的存取方式又各有不同之處
```
* Hit:想在上層找資料,且真的找到的狀況
1. hit rate:發生hit的比例(上層就找到資料的比例)
2. hit time:找到資料後,將之從上層取出的時間(RAM access time + time to determine hit/miss)
* Miss:想在上層找資料,結果沒找到(資料在下層)
1. miss rate:發生miss的比例 = 1 - (hit rate)
2. miss penalty:從下層找出資料並塞入上層的時間(存取下層的時間 + 從下傳到上的傳輸時間)(注意上層的空間不夠放新來的東西的話,就要把原本的東西丟掉)
:::danger
因為Hit time << Miss penalty
所以要創造好的memory hierarchy能做得有:
1. 提高hit rate
2. 降低miss rate
3. 減少hit time的長度
:::
### 4 Questions for Hierarchy Design
四個關於設計hierarchy時要考量的問題
1. block placement:block要放在哪裡?
2. block identification:怎樣知道要找的block在不在上層&在哪裡?
3. block replacement:如果block不在上層,要從下層找到並移到上層,而上層空間不夠,如何選擇要把上層的什麼東西丟掉?
4. write strategy:如果資料被寫入/更新,應該做什麼動作?只要更新上層的資料就好,還是下層的也要?
### Summary
1. locality
* temporal locality是從「時間」的角度看
* spatial locality是從「空間」的角度看
2. DRAM因為密度高所以大且便宜,但是慢
3. SRAM因為密度低所以小而貴,可是很快
因為SRAM很貴,所以不會用來大量使用;然而DRAM又太慢,跟不上CPU的速度,於是出現memory hierarchy,透過locality的特性及運用,讓人有一種「記憶體又大又快又便宜」的錯覺。