cpu → m1 → m2 ······ mn
訪問時間t: t1 < t2 < ······ tn
容量s:s1 < s2 < ······ sn
平均每位**c:c1 < c2 < ······ cn
整個系統的平均訪問時間接近m1的訪問時間,容量和平均每位**接近mn的。
以二級儲存系統為例(只有m1和m2)
命中率h:cpu訪問儲存系統時,在m1中找到所需資訊的概率。
h =n
1n1+
n2
h = \frac}} + }}
h=n1+
n2n
1(n1為訪問m1的次數,n2為訪問m2的次數)
不命中率f:f = 1 - h
當命中時,訪問時間為t1,命中概率為h
不命中時,訪問時間(從向m2發出訪問請求到把整個資料塊調入m1中所需的時間)為tm = t2 + tb (tb是傳送乙個資訊塊所需的時間)
平均訪問時間ta:
t a=
h⋅t1
+(1−
h)(t
1+tm
)= h \cdot + (1 - h)( + )
ta=h⋅
t1+
(1−h
)(t1
+tm
)受延遲的影響,越近越快,遠了快不了(面積大也快不了)
越快的儲存器越小、越貴
l1-$(1級快取):32kb-128kb(而且資料和指令分開),與處理器速度匹配
l2-$(2級快取):4mb-8mb(平均每核2mb)
llc(3級快取):38.5mb
ddr(記憶體):2g-16gb
全相聯映象
(1)映象規則:①主存與快取分成相同大小的資料塊 ②主存的任意一塊可以映象到cache中的任意一塊。
(2)特點:①空間利用率最高 ,衝突的概率也最低 ,命中率高②實現最為複雜,成本高,速度低,需要比較每個cache塊是否被使用
直接相聯映象
(1)映象規則:①主儲存器中一塊只能映象到cache的乙個特定的塊中。
cache位址的計算公式: b = b mod cb(b是cache塊號,b是主存塊號,cb是cache塊數)
cache位址與主儲存器位址的低位部分完全相同
②對主存進行分割槽,每個區的資料塊數量和cache中資料塊的數量相同。③每個區中的資料塊和cache中資料塊一一對應放置
(2)特點:①硬體實現很簡單不需要相聯訪問儲存器 ②訪問速度也比較快,實際上不需要進行位址變換 ③塊的衝突率比較高,空間利用率低 ,命中率低
組相聯映象
(1)映象規則:①主存和cache按同樣大小劃分成塊和組 ②主存和cache的組之間採用直接映象方式 ③在兩個對應的組內部採用全相聯映象方式 ④用主存位址中的組號g去塊表中查詢,區號和塊號是否命中,命中就可以找到該資料在cache中組內塊號,然後合成cache位址進行資料查詢
(2)特點:①衝突概率比較低 ②利用率大幅度提高 ,速度快③失效率明顯降低 ④實現難度和造價要比直接映象方式高
寫(1)寫穿(write through):寫cache,同時寫記憶體
特點:①一致性好 ②速度慢
(2)寫回(write back):只寫cache,只有被替換時才寫回記憶體
特點:①速度快 ②出錯率高一倍
替換演算法
(1)隨機法:(random,rand)
(2)先進先出法(first-in first-out,fifo)
(3)近期最少使用法(least recently used,lru)
(4)最久沒有使用法(least frequently used,lfu)
不命中型別
(1)強制性不命中(compulsory miss)
當第一次訪問乙個塊時,該塊不在cache中,需從下一級儲存器中調入cache。(冷啟動不命中,首次訪問不命中)(增加塊大小,硬體預取)
(2)容量不命中(capacity miss)
如果程式執行時所需的塊不能全部調入cache中,則當某些塊被替換後,若又重新被訪問,就會發生不命中。(增加cache容量)
(3)衝突不命中(conflict miss)
在組相聯或直接映象cache中,若太多的塊映象到同一組(塊)中,則該組中某個塊被別的塊替換(即使別的組或塊有空閒位置)然後又被重新訪問的情況。(碰撞不命中,干擾不命中)(提高相聯度)
不命中的特點
(1)相聯度越高,衝突不命中就越少
(2)強制性不命中和容量不命中不受相聯度的影響
(3)強制性不命中不受cache容量的影響,但容量不命中卻隨著容量的增加而減少
降低cache不命中率
(1)增加cache大小
①對於給定的cache容量,當塊大小增加時,不命中率開始是下降,後來反而上公升了。
②一方面它減少了強制性不命中,另一方面,由於增加塊大小會減少cache中塊的數目,所以有可能會增加衝突不命中。
③cache容量越大,使不命中率達到最低的塊大小就越大。
④增加塊大小會增加不命中開銷
(2)增加cache容量
①最直接的方法 ② 增加成本 ③可能增加命中時間 ④在片外cache中用得比較多
(3)提高相聯度
①採用相聯度超過8的方案的實際意義不大
②提高相聯度是以增加命中時間為代價
③容量為n的直接映象cache的不命中率和容量為n/2的兩路組相聯cache的不命中率差不多相同。
(4)偽相聯cache
①命中時間小 ②不命中率低
③在邏輯上把直接映象cache的空間上下平分為兩個區。對於任何一次訪問,偽相聯cache先按直接映象cache的方式去處理。若命中,則其訪問過程與直接映象cache的情況一樣。若不命中,則再到另一區相應的位置去查詢。若找到,則發生了偽命中,否則就只好訪問下一級儲存器。
(5)硬體預取
①指令和資料都可以預取
②預取內容既可放入cache,也可放在外緩衝器中
③指令預取通常由cache之外的硬體完成
(6)編譯器控制的預取
①暫存器預取:把資料取到暫存器中。
②cache預取:將資料取到cache中。
③故障性預取:在預取時,若出現虛位址故障或違反保護許可權就會發生異常
④非故障性預取:在遇到這種情況時則不會發生異常,因為這時它會放棄預取,轉變為空操作。
(7)編譯器優化
程式**和資料重組
(8)「犧牲"cache
①一種能減少衝突不命中次數而又不影響時鐘頻率的方法
②基本思想:在cache和它從下一級儲存器調資料的通路之間設定乙個全相聯的小cache,稱為「犧牲」cache(victim cache)。用於存放被替換出去的塊(稱為犧牲者),以備重用。
③對於減小衝突不命中很有效,特別是對於小容量的直接映象資料cache,作用尤其明顯
採用兩級cache
(1)第一級cache(l1)小而快
(2)第二級cache(l2)容量大
讓讀不命中優先於寫
寫緩衝合併
請求字處理技術
非阻塞cache技術
例題: 考慮某兩級cache,第一級為l1,第二級為l2,兩級cache的全域性不命中率分別是4%和2%,假設l2的命中時間是10個時鐘週期,l2的不命中開銷是100時鐘週期,l1的命中時間是1個時鐘週期,平均每條指令訪存1.5次。問:每條指令的平均停頓時間是多少個時鐘週期?
l1: 全域性不命中率 = 區域性不命中率 = 4%
l2:全域性不命中率 = 2%, 區域性不命中率 = 2% ÷ 4% = 50%(l2全域性 = l1全域性 × l2區域性)(l3全域性 = l1全域性 × l2區域性 × l3區域性)
平均訪存時間=l1命中時間+l1不命中率 ×(l2命中時間+ l2區域性不命中率 × l2不命中開銷) =1+4%×(10+50%×100)= 3.4
每次訪存的平均停頓時間 = 3.4 - 1 = 2.4
每條指令的平均停頓時間=2.4×1.5=3.6個時鐘週期
採用容量小、結構簡單的cache
採用虛擬cache
cache訪問流水化
蹤跡cache
並行主存系統是在乙個訪存週期內能並行訪問多個儲存字的儲存器
提高主存頻寬:
單體多字儲存器
能提高m(字數)倍,實現簡單, 訪存效率不高
原理借助於磁碟等輔助儲存器來擴大主存容量,使之為更大或更多的程式所使用。
虛擬儲存器指的是主存-外存層次。以透明的方式為使用者提供了乙個比實際主存空間大得多的程式位址空間
特點(1)多個程序可以共享主存空間
(2)程式設計師不必做儲存管理工作
(3)採用動態再定位,簡化了程式的裝入
分類(1)頁式
(2)段式
映象規則:全相聯
查詢演算法:頁表,段表,tlb(快表)
替換演算法:近期最少使用法(least recently used,lru)
寫策略:寫回法
計算機體系結構
計算機體系結構 計算機體系機構指計算機中部件和部件之間的聯絡 一 馮 諾依曼體系 1 計算機處理的資料和指令用二進位制數表示 2 採用儲存程式方式,指令和資料儲存在同乙個儲存器中。3 指令由操作碼和位址組成。操作碼指明指令的操作型別,位址指明運算元和位址。4 以運算器為中心,i o裝置與儲存器間的資...
計算機體系結構
2.計算機體系結構 經典計算機體系結構概念的實質是計算機系統中軟硬體介面的確定,其介面之上的是軟體的功能,介面之下的是硬體和韌體的功能。廣義 現代 的計算機體系結的構概念,它除了包括經典的計算機體系結構的概念範疇 指令集結構 還包括計算機組成和計算機實現的內容。計算機體系結構是程式設計師所看到的計算...
計算機體系結構
首先表示下就剛剛九寨溝發生7級 成都震感強烈 1.記憶體與位址 乙個位址所對應的記憶體單元不能存很多東西,只能存乙個位元組,以前講過的int float等多位元組的資料型別儲存在記憶體中要占用連續的多個位址,這種情況下資料的位址是它所佔記憶體單元的起始位址。2.cpu 處理器是32位的,那麼乙個字就...