計算機組成與系統結構 cache 原理與計算

Xavier34123發表於2020-11-25

cache原理以及相關計算

一、cache存在的意義

介紹cache之前, 大家需要先知道區域性性原理:

區域性性原理是指CPU訪問儲存器時,無論是存取指令還是存取資料,所訪問的儲存單元都趨於聚集在一個較小的連續區域中。

  • 時間區域性性(Temporal Locality):如果一個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問。
    程式迴圈、堆疊等是產生時間區域性性的原因
  • 空間區域性性(Spatial Locality):在最近的將來將用到的資訊很可能與正在使用的資訊在空間地址上是臨近的。
  • 順序區域性性(Order Locality):在典型程式中,除轉移類指令外,大部分指令是順序進行的。順序執行和非順序執行的比例大致是5:1。此外,對大型陣列訪問也是順序的。
    指令的順序執行、陣列的連續存放等是產生順序區域性性的原因

因此, 既然CPU對於Main Memory中不論是資料(data
)還是指令(instruction)的訪問都是趨於集中的, 那麼我們是不是可以開闢另外一個區域來存放這些連續的內容呢?

於是cache就誕生了, 暫存可能要訪問的內容, 從而能夠快速訪問區域性內容, 大大提高訪問速度.

CPU對於儲存訪問的分層: Cache<–>Main Memory<–>External Memory

二、cache的特點

  • 位於普通主記憶體和CPU之間
  • 可能位於CPU晶片或模組上
  • 與主記憶體的大小相比,Cache相對較小
  • 執行速度接近處理器
  • 和主存比非常貴
  • 儲存的是主存中一部分內容的 副本(copy)

三、cache中儲存的內容

Cache將Memory中的一個Block(由K個字構成)作為一個Line來儲存, 一個Line中的內容和對應的Block內容是一樣的.

每個Line中都有幾位的內容來標記其對應的Block號, 稱之為Tag位, 存在開頭的位置.

每個Block對應著K個Word(s), 因此需要logK(向上取整)位來標記一個字存在Block中的位置.

四、cache的命中率

通過命中率 (hit ratio) 來衡量
命中率 = (cache命中的次數)/(cache命中的次數 + 訪問memory的次數)

五、cache的效能度量

從命中率計算公式可以看出, 如果一個cache的Line數越大、命中率越高, 那麼理論上來說效果就越好, 但是cache的尺寸變大也會帶來其他問題

  • 小尺寸
    – 便宜:快取的價格接近主記憶體的價格
    – 命中率低,訪問速度可能比訪問主記憶體慢
  • 大尺寸
    – 命中率高:接近100%,訪問速度可能接近快取訪問
    – 非常昂貴
    – 需要更多的門來實現, 比小cache來得慢
    – CPU佔用面積更大

因此, 需要對容量、價格、速度進行權衡.

六、cache的對映方式

典型的有三種: 直接對映(direct mapping)、關聯對映(associate mapping)、集合關聯對映(set associative mapping)

1.直接關聯對映

直接對映
主存中每個塊, 都分配到了一個特定的line上.

那麼最終要查詢的字, 對應的字地址是:
在這裡插入圖片描述
Line位標識: 處在哪一個line號
Tag位標識: 在對應的line的號下, 對應的block號是多少
Word位標識: 在對應的block號下, 對應的字號是多少

直接對映組織方式圖
直接對映cache組織方式圖

總結:
  • 優點: 設計簡單、易於實現
  • 缺點: 對應關係固化, 所以有可能出現顛簸

2.關聯對映

特殊情況: 全關聯對映(Fully Associative Mapping)

一個主存塊可以被存放到任何一個line中.
Tag 唯一標識記憶體塊
每一個Line的Tag都要被檢查是否匹配
全關聯對映

總結:
  • pros: 降低了顛簸出現的頻率
  • cons: 需要大量的比較, 即在設計上需要並聯比較電路, 因此很昂貴複雜

3.集合關聯對映

集合關聯對映是前兩者的結合, 通過增加set(集合)給line進行分組; 每個block號對於set號先進行直接關聯; 再通過全關聯的方式, 在set中尋找一個Line放置資料.
集合關聯對映

集合關聯對映例題:

Suppose a computer, its main memory is 4MB,Cache’s capacity is 16KB,block size is 8 words,word length is 32bit,addressed by word, please design a cache organization of 4-way set associative mapping, require:

  1. draw the structure of main memory address and mark the bits of each segment;
  2. initially, Cache is empty,CPU fetches 100 words from memory unit0, unit1, … unit99 in sequence, repeat this sequence 8 times. How much is the hit rate of Cache ?
  3. if the speed of cache is 6 time that of main memory, introducing cache, how many times is the speed of CPU accessing memory improved?

解題思路:
(1)
首先: 計算機按字定址, 那麼計算機為每個字分配地址, 即字地址需要: 4MB/32bit = 1M = 2^20, 需要20字地址位.
其次: 主存中是按照塊儲存的, 一個塊有8個字, 因此需要log(8)=3位來確定字相對於塊的位置, 所以word位為3位.
再者: 要把所有的塊通過direct mapping的方式放入set, 而set包含4個line, 本題中已經給出了cache的儲存大小, 直接算出line位: 16KB/(8*32bit) 為9位, 其中line儲存結構與block儲存結構完全相同, 9位再分成set後, 即除4後, 得到set位為7位.
最後: tag位長 = 總地址長 - set位長 - word位長

綜上: Tag位 10位, Set位7位, Word位2位.
在這裡插入圖片描述
(2)
Cache向CPU傳輸是按字傳輸, 而主存向Cache傳輸是按照Block傳輸, 考慮到題目中所需要的記憶體單元是連續儲存。
那麼CPU拿unit0的時候, cache中會先未命中一次, 此時Cache會從主存那裡拿一個block的資料, 也就是unit0~unit7, 一共八個字, 隨後CPU拿unit1時, 在cache中就命中了。
同時, Cache的容量能夠放的下這100個詞, 因此, 第一輪CPU拿完之後, 100個字全在Cache中存有了, 隨後的所有CPU拿資料, Cache都會命中.
綜上: Cache未命中次數為100/8 向下取整 +1 = 13次, 其他全部命中, 命中率為(800-13)/800 約等於 98%
(3)
假設訪問一次Cache需要時間t, 那麼訪問記憶體時間為6t
根據第二問命中率算出效率優化了:
6t/(98%*t+2%*7t)=5.3倍

七、Cache替換演算法

(1)直接關聯對映情況下

直接替換, 因為沒得選, 只能替換固定對應的那個line

(2)關聯對映情況下

  • 硬體實現演算法
  • 最近最少使用(LRU)
  • 先進先出(FIFO) —— 替換cache中待了最長的block
  • 最不常用(Least frequently used) —— 替換命中最少的block
  • 隨機:效能幾乎與LRU相同

八、Cache 寫操作

與讀不同,快取寫入更為複雜, 因為需要保持快取、記憶體和其他快取之間的資料一致性.

兩種通常用於單CPU系統的快取記憶體寫入策略:

  • 寫直達 write through:

所有的寫操作直接進入記憶體和cache

缺點:

  1. 大量的寫入流量,可能會導致匯流排瓶頸
  2. 降低了寫入的速度。
  • 寫回 write back寫回:

不僅寫快取,還將修改標誌放在寫入的行中,當該行被替換時,將該行寫回記憶體。
適用於迭代操作和I/O模組直接連線到快取的系統

缺點

  1. 記憶體中的部分內容無效
  2. 電路很複雜
  3. 快取可能成為瓶頸
  • 快取一致性方法—多CPU
  1. 寫直達匯流排監控
    快取記憶體控制器監視地址行,如果某個位置寫入共享記憶體,而資料在快取中,則使快取項無效。
  2. 硬透明
    使用額外的硬體。當一個快取寫入記憶體時,其他快取中的相應項也會更新
  3. non-cache 記憶體
    許多CPU共享一劑主記憶體,共享的內容從不復制到快取中

相關文章