本次筆記內容:
P39 計算機組成原理(39)
P40 計算機組成原理(40)
我的計組筆記彙總:計算機組原理成筆記
視訊地址:計算機組成原理 清華大學劉衛東 全58講 國家精品課程 1080P 更完
幻燈片見我的 GitHub 倉庫:計算機組成原理 src/slides
本節課幻燈片:組成原理31 dram.pptx
這節課與2013年11月28日,按理說應該要交實驗報告了。
實驗目標概述
主要模組設計
- 硬體:Datapath、Controller、Memory、I/O
- 軟體:對系統軟體的修改、應用軟體
主要模組實現
實驗成果展示
實驗心得和體會
提交材料
- 實驗報告
- 視訊材料
- 完整原始碼及相關說明
靜態記憶體是快取記憶體記憶體的基礎,因此,先講靜態記憶體。
寫:
讀:
重新整理:
儲存容量高:
存取速度慢:
能耗低、成本低。
如何彌補這個鴻溝呢?答案:靜態記憶體。
也用 CPU 的觸發器結構做儲存就可以了。
寫1:
讀:
上面,地址進行譯碼後,選中數據。
如何做到存取的每一個地址響應速度都是一樣的?如何實現隨機存取?
「靜態」之所以爲「靜態」,是因爲其不需要像動態記憶體一樣重新整理
。通電即保證恆定穩定數據。
特點 | SRAM | DRAM |
---|---|---|
儲存資訊 | 觸發器 | 電容 |
破壞性讀出 | 非 | 是 |
需要重新整理 | 不要 | 需要 |
送行列地址 | 同時送 | 分兩次送 |
執行速度 | 快 | 慢 |
整合度 | 低 | 高 |
發熱量 | 大 | 小 |
儲存成本 | 高 | 低 |
程式執行時的區域性性原理表現在:
時間
內,最近被存取過的程式和數據很可能再次被存取空間
上這些被存取的程式和數據往往集中在一小片儲存區順序
上,指令順序執行比轉移執行的可能性大(大約5:1)合理地把程式和數據分配在不同儲存媒介中。
利用程式的區域性性原理:
for (i=0; i<1000; i++) {
for (j=0; j<1000; j++ ) {
a[i] = b[i] + c[i];
}
}
If err {……}
else for (i=0; i<1000; i++) {
for (j=0; j<1000; j++ ) {
e[i] = d[i] * a[i];
}
}
程式在一定的時間段內通常只存取較小的地址空間,兩種區域性性:
使用高速緩衝記憶體Cache
來提高CPU對記憶體的平均存取速度。
定義:設定於主記憶體和CPU之間的記憶體,用高速的靜態記憶體實現,快取了CPU頻繁存取的資訊。
特點:
如上,其實先不存取主記憶體,先存取 CACHE 。可能 CPU 要等50個週期去讀,有了 CACHE ,可能等 1 個週期就結束了。
地址和Cache行之間的對映關係:
如何根據主記憶體地址得到Cache中的數據?
數據之間一致性:
Cache中的內容是否已經是主記憶體對應地址的內容?
數據交換的粒度:
Cache中的內容與主記憶體內容以多大的粒度交換?
Cache內容裝入和替換策略
如何提高Cache的命中率?
塊(Line):數據交換的最小單位
命中(Hit):在較高層次中發現要存取的內容
缺失(Miss):需要在較低層次中存取塊
注意:命中時間<<缺失損失
平均存取時間=HR*命中時間+(1-HR)*缺失損失
塊大小:4~128 Bytes
命中時間:1~4週期
失效損失:
命中率:80%~99%
Cache容量:1KB~256KB
如何把塊放入 CACHE ?CACHE 明顯比主記憶體容量小得多。因此,不光要裝入數據,還要裝入數據標記
:把哪些數據裝入了。對應地,主記憶體儲器的主記憶體地址
分爲兩部分:塊號、塊內地址。
此外,還有應該有有效位
,表達這條數據是否可用。
主記憶體:4GB,Cache:4KB,塊大小:4B,全相聯標記位數?
解:
4GB 記憶體,地址需要 32 位表達;
Cache 有 4KB ,每塊 4B ,則有 1k 塊。
一塊有 4B,塊內地址用 2 位表達;
其他的位都是用來做標記的。
因此,標記位數爲 32-2=30 。
因此,在讀主記憶體時,把主記憶體地址的高 30 位作爲標記去比較,如果與 Cache 的某條/塊相等,且有效位爲1,那麼會讀這個數據。具體是哪個位元組,則由塊內地址決定。
能不能設計一個只有一個比較器的 Cache ?
這就是直接對映方式。
如上,從多對多的關係,變成一對多的關係,
主記憶體儲器的各區域的第 1 塊只能到 Cahce 的第 1 行/塊裏面去。
因此,主記憶體地址還需要多一個索引
,用於說明:這一塊在 Cache 行裡的第幾行(上圖中的紅線還是藍線)。
因此,存取過程爲:
看索引
,索引點明瞭 Cache 中的第幾行要用來比較;主記憶體:4GB
Cache:4KB
塊大小:4B
直接對映的標記位數? 索引位數?
4GB 記憶體,地址需要 32 位表達;
Cache 有 4KB ,每塊 4B ,則有 1k 塊。
由 1k 的,索引應該有 10 位。
一塊有 4B,塊內地址用 2 位表達;
其他的位都是用來做標記的。
因此,標記位數爲 32-2-10=20 。
硬體實現比較簡潔,只有一個比較器。
8 塊 cache ,每塊 16 位元組,「直接對映」:記憶體中的每個單元在Cache中只會有一個唯一的位置和它對應。
假定有如下存取操作:
Read location 0
Read location 16
Read location 32
Read location 4
Read location 8
Read location 36
Read location 32
Read location 128
Read location 148
cache中命中和缺失各有多少次?缺失的操作如下:
Read location 0
Read location 16
Read location 32
Read location 128 (並且把 0-15 從第一塊替換)
Read location 148 (並且把 16-31 從第一塊替換)
命中率 = 4/9 = 45%
失效的原因:
增加塊大小可以更好地利用空間區域性性。
且僅需要比較一次。
但是缺點是:利用率低,命中率低,效率較低。
靜態記憶體:
Cache:
T觸發器是在數位電路中,凡在CP時鐘脈衝控制下,根據輸入信號T取值的不同,具有保持和翻轉功能的電路,即當T=0時能保持狀態不變,T=1時一定翻轉的電路。