240 likes | 519 Views
Ch.7 記憶體. 7.1 記憶體簡介. 使用者想要一個”大又快”的記憶體 impossible 不可能同時滿足兩者 例子 圖書館,書桌,書,人 磁碟、記憶體 (DRAM) 、快取 (SRAM) 、 CPU. 記憶體技術. 標準的存取時間. 每 Mbyte 的價錢 (1997 年 ). SRAM. 5-25 ns. $ 100 - $250. DRAM. 60-120 ns. $ 5 - $10. 磁碟機. 10-20 百萬 ns. $ 0.10 - $0.20. 7.1 記憶體簡介.
E N D
7.1 記憶體簡介 • 使用者想要一個”大又快”的記憶體 • impossible • 不可能同時滿足兩者 • 例子 • 圖書館,書桌,書,人 • 磁碟、記憶體(DRAM)、快取(SRAM)、CPU
記憶體技術 標準的存取時間 每Mbyte的價錢(1997年) SRAM 5-25 ns $ 100 - $250 DRAM 60-120 ns $ 5 - $10 磁碟機 10-20 百萬 ns $ 0.10 - $0.20 7.1 記憶體簡介 區域性原則(principle of locality) : • 時間區域性(Temporal locality) • 時間區域性就是當一筆資料被使用到時,在短時間內此筆資料將會再度被使用到的機會很大 • 空間區域性(Spatial locality) • 當一筆資料被使用到時,此資料附近位址的資料也會被使用到的機會很大 慢 便宜
7.1 記憶體簡介 階層式記憶體(memory hierarchy)基本架構 : 快 小 貴 較高層次 CPU CACHE RAM DISK 慢 大 便宜 較低層次
7.2 快取記憶體的基礎概念 區塊(block) : 儲存資訊最小單位 Hit : 處理器需要的資料出現在記憶體層次中的某個區塊裡. Miss : 沒有在較高層次的記憶體中找到需要的資料. Hit ratio : 能在較高層次的記憶體中找到需要資料的比例. Miss ratio : (1 - hit ratio) Hit time: 存取較上層記憶體所花費的時間 Miss penalty: 到較低層次的記憶體尋找並載入到較高層次記憶體的時間
7.2 快取記憶體的基礎概念 • 快取記憶體(SRAM) v.s. 主要記憶體 (DRAM) • 快取參考(cache reference): 尋到(hit)或誤失(miss) • 處理器要求不存在快取記憶體裡的 Xn • 這個需求會造成誤失 • Xn(區塊) 會由主要記憶體傳入快取記憶體內 • 快取記憶體的寫入 • 間接寫入(write back) v.s. 直接寫入(write through) • 寫入尋到(write hit) v.s. 寫入誤失(write miss) • 此時我們有兩個問題存在: • 我們如何知道資料是否在快取記憶體內? • 如果是的話,我們要如何才能找到這筆資料? 間接寫入(write back) : 寫入時,僅將新值寫入快取的區塊中,當該區塊被替換時,才會寫入到記憶體,硬體製作複雜,效能較高. 直接寫入(write through) : 同時將資料寫入記憶體與快取,可保持兩者資料一致,方法簡單但效能不高,可用寫入緩衝器(write buffer)增加效能. 1
7.2快取記憶體的基礎概念 • 直接對映 • 將每個主記憶體的位置恰好對應到快取記憶體的一個位置 • 幾乎所有採用直接對映的快取記憶體使用底下的對映方式: • (區塊位址)同餘 (快取記憶體中的區塊數目) • Ex. 學生的座位 • 圖 7.5 顯示初一個採用直接對映的8個字組的快取記憶體。 • 說明介於0與 31的記憶體字元位址對映到相同的快取記憶體位置。 • 主要記憶體中的最低的3個位元用來選取快取記憶體的區塊。 • 最高的2個位元當作標籤。 標籤中包含了位址資訊,可以用來 辨別快取記憶體中的字組是否對應到我們要求的字組。 • 有效位元( valid bit )用來標示快取記憶體內的某個區塊是否 存放著有效的位址。 索引(ndex) V 標籤(tag) 資料(data) 2
7.2快取記憶體的基礎概念 • 圖 7.5 直接對映 標籤(tag) 2 bit 索引(ndex) 3 bit 3
7.2快取記憶體的基礎概念 • 範例 • 圖7.6 說明了一個8字組大小, 採用直接對映的快取記憶體如何 • 回應處理器一連串的需求。 • 時間區域性: • 以最近被存取到的字組取代最近較少參考到的字組。 4
7.2快取記憶體的基礎概念 • 假設一個 32位元的記憶體, 一個資料儲存量為 2n字組,且 • 每個區域大小為 1 字組的直接對映快取記憶體需要一個大小為 • 32-(n+2)的標籤欄位。 • n個位元用來當作索引 , 2 個位元當作Byte offset , 其餘為標籤. 標籤(其餘) n Byte offset 32-(n+2) n 2 6
7.2快取記憶體的基礎概念 • 採用空間區域性 ( spatial locality )的優點 • 使用多重字組的快取記憶體區塊 • 當誤失發生時, 相鄰的多個字組便會被擷取出來 • 其他的字組馬上就會被使用到的機率相當大 • 一個 64 KB快取記憶體區塊包含: • 每個區塊有4個字組 (16 位元組) • 4K 區塊 • 一個 32-位元 位址可解譯為 • 標籤 (16-位元) • 索引 (12-位元) • 區塊偏移量 (2-位元) • 位元組位移量 (2-位元) • 範例 • 64個區塊的快取,區塊大小為16Byte,位元位址1200對映到哪個區塊? 8
7.2快取記憶體的基礎概念 • 圖 7.10 說明對一個特殊的位址如何找到需要的快取記憶體區塊的方法 9
7.2快取記憶體的基礎概念 增大區塊miss penalty 會增加! • 誤失率 v.s. 區塊大小 • IF 時間 =快取記憶體存取時間+誤失率 *誤失代價 • 增加區塊大小與問題的關連性 • 誤失所付出的額外的時間代價 勝過大區塊誤失率的減少 10
7.3 改進快取記憶體的效能 • 區塊置換 • 直接映射(Direct mapped) • 一個記憶體區塊可以放置到快取記憶體一個確切的位置 • 完全關聯式(full associative) • 一個記憶體區塊可和快取記憶體中的任何項目產生關聯 • 要找到一個區塊,必須搜尋所有快取記憶體中的項目 • 集合關聯式(Set associative) • 每個區塊可以放置的位置數目是固定的 • n-way集合關聯式快取 • 一個記憶體中的區塊可以映射至快取記憶體的一個集合中 ,然後此區塊可以放置到集合中的任一個位置。 13
7.3改進快取記憶體的效能 • 範例 • 圖7.15 顯示出根據直接映射、集合關聯式、完全關聯式的放置方法 • ,來將12個區塊放到快取記憶體的8個區塊中的某個位置。(12 % 8=4) 14
7.3改進快取記憶體的效能 • 範例 快取的關聯性 • 有三個小容量的快取記憶體,每個都包含4個1個字組的區塊。第一個 • 為完全關聯式,第二個為2-way集合關聯式,第三個為直接映射。給定 • 下面序列的區塊位址:0、8、0、6、8,試找出每種快取結構的誤失數目。 • 解答: • 狀況I. 直接映射 • 5 個誤失 15
7.3改進快取記憶體的效能 • 解答 (續) • 狀況 II. 2-way 集合關聯式 • 在集合中最久沒有被使用的區塊會被取代 • 4 個誤失 16
7.3改進快取記憶體的效能 • 解答 (續) • 狀況 III.完全關聯式 • 在集合中最久沒有被使用的區塊會被取代 • 3個誤失 17
7.3改進快取記憶體的效能 • 圖 7.19 展示一個 4-way集合關聯式的快取記憶體的製作 • 利用索引來選擇包含我們所要尋找的位址的集合 • 這集合中所有區塊的標籤都必須被平行的搜尋過 • 在這個例子中需要4個比較器及4對一的多工器來從4個集合 • 中選擇可能的資料 • 結論 • 增加關聯性程度的好處是通常可以減少誤失率, 可由以上 • 的例子得知 • 關聯式的快取記憶體所需付出的額外成本為比較及延遲 18
使用多層快取(Multilevel Caches) 假設有一處理器(CPI=1 500Mhz),存取主記憶體的時間為200ns,每個指令的miss rate為5%,若加上第二層快取,這第二層快取無論hit或miss均需20ns的存取時間,並可以減少miss rate到2%,試問此計算機可以快多少? ANS: 500Mhz = 2ns/cycle , 所以主要記憶體的miss penalty = 200/2 = 100 cycles 單一層cache => 總共CPI = 1+5%x100 = 6 (完全不會發生誤失的CPI = 1) 第二層cache hit或miss均需要 20/2 = 10 cycles 兩層式cache => 總共CPI = 1+5%x10+2%x100 = 3.5 效能快了6/3.5 = 1.7倍