26-計組-存儲器與Cache機制

一、存儲器與局部性原理

1. 局部性原理

基礎概念

  • 時間局部性:一個存儲單元被訪問后,短時間內可能再次被訪問(例如循環變量)。
  • 空間局部性:一個存儲單元被訪問后,其附近單元可能在短時間內被訪問(例如數組連續訪問)。

通俗理解

  • 時間局部性:程序反復訪問同一數據,如循環中的變量 sum。
  • 空間局部性:程序訪問連續存儲的數據,如數組按存儲順序訪問。

例題:程序訪問局部性分析

  • 背景:數組按行優先存儲,比較兩個求和程序段。
    • 程序段A(行優先訪問):
      • 訪問順序與存儲順序一致,空間局部性優秀,Cache命中率高。
    • 程序段B(列優先訪問):
      • 訪問順序與存儲順序不一致,空間局部性差,Cache命中率低。
    • 變量sum分析
      • 時間局部性:優秀(每次循環都訪問 sum)。
      • 空間局部性:無意義(單個變量不涉及相鄰單元)。

二、Cache工作原理

類比說明

  • 主存:像超市,存儲所有數據,訪問慢。
  • Cache:像儲物柜,存放高頻數據,訪問快。
  • 優勢:利用局部性原理預存數據,避免頻繁訪問主存,提升效率。
  • 性能關鍵Cache命中率,訪問速度:Cache > 主存 > 外存。
1. Cache與主存結構關系
  • 結構對應
    • Cache分為,每行大小等于主存的一個
    • 主存塊頻繁訪問時被復制到Cache行。
  • 容量差異
    • Cache容量遠小于主存,僅存儲高頻數據副本,出于成本和需求考慮。
2. Cache地址結構
  • 地址組成
    • Cache地址:行號(高位) + 塊內地址(低位)
    • 例:16行×16單元的Cache,地址8位(高4位行號,低4位塊內地址)。
    • 二進制地址 0010 0001:高4位 0010(行號2),低4位 0001(塊內偏移1)。
  • 設計思想
    • n位地址表示2?種含義。
    • Cache行數2? → 行號占c位;每行2?單元 → 塊內地址占b位。
3. 主存地址特點
  • 地址結構
    • 主存地址:塊號(高位,t位,2?塊) + 塊內地址(低位,b位,與Cache一致)
    • 主存塊數2? >> Cache行數2?,t > c。
  • 地址長度差異
    • 主存地址比Cache地址長,高位(塊號)位數多,塊內地址位數相同。
  • 映射問題
    • 主存地址不含Cache行號,需通過映射方式確定Cache位置。
4. 有效位
  • 功能
    • 每個Cache行有有效位,標識該行是否存儲有效主存塊副本。
    • 初始化:系統啟動時有效位為0(無效)。
    • 數據裝入:主存塊復制到Cache后有效位設為1。
    • 淘汰:有效位置0,實現邏輯刪除。
  • 特點
    • Cache行內多個存儲單元共享1個有效位。
    • 主存塊無有效位,僅為Cache設計。
5. CPU訪問Cache流程
  • 目的:通過主存地址訪問Cache獲取數據。
  • 命中流程
    • 主存地址的塊在Cache中:
      1. 讀取Cache行數據。
      2. 傳送至CPU。
      3. 結束訪存。
  • 缺失流程
    • 主存地址的塊不在Cache中:
      1. 從主存讀取整個塊。
      2. 尋找Cache空閑行(若無空閑,觸發淘汰)。
      3. 復制主存塊到Cache。
      4. 傳送目標單元數據至CPU。
    • 局部性原理:整塊調入利用空間局部性。
  • 性能指標
    • 命中率:命中次數/總訪問次數。
    • 訪問時間:命中時(T_c:Cache訪問+判斷),未命中時(T_c + T_m:Cache判斷+主存讀取)。
6. 平均訪問時間(AMAT)
  • 公式
    • AMAT = p * T_c + (1-p) * (T_m + T_c) = T_c + (1-p) * T_m
    • p:命中率,T_c:Cache訪問時間,T_m:缺失代價(主存讀取+傳輸)。
  • 定義:AMAT = 命中時間 + 缺失率 × 缺失代價。

例題:命中率計算

  • 條件:總訪存1000次,缺失50次。
  • 計算:
    • 命中次數 = 1000 - 50 = 950。
    • 命中率 = 950/1000 = 95%。
  • 答案:95%。

三、Cache映射方式

1. 直接映射
  • 原理:主存塊固定映射到特定Cache行。
  • 地址劃分
    • 主存地址:tag(t-c位) + Cache行號(c位) + 塊內地址(b位)
    • Cache地址:行號(c位) + **塊內地址(b主存地址:tag(t-c位) + Cache行號(c位) + 塊內地址(b位)
    • Cache地址:行號(c位) + 塊內地址(b位)
  • 映射方法
    • 主存塊號取模Cache行數,得Cache行號。
    • tag位:主存塊號與Cache行號的差(t-c位)。
  • 命中判斷
    • 比較主存地址tag與Cache行tag。
    • 檢查有效位是否為1。
  • 缺失處理
    • 讀取主存塊到Cache。
    • 更新tag位和有效位。
    • 數據送回CPU。

例題:地址劃分計算

  • 條件:主存容量是Cache的4096倍,Cache有64塊,直接映射。
  • 解題:
    • Cache行數:2? = 64 → 行號6位。
    • 主存塊數:64 × 4096 = 21? → 塊號18位。
    • tag位:18 - 6 = 12位。
    • 映射表大小:(tag位12 + 有效位1) × 64 = 832位。
  • 答案:832位。
  • 易錯點:tag位存在于主存地址和Cache行,需計入有效位。
2. 全相聯映射
  • 特點:主存塊可存入任意Cache行。
  • 地址結構
    • 主存地址:tag(t位,主存塊號) + 塊內地址(b位)
    • 無Cache行號,需全行比較。
  • tag作用:標識主存塊位置。
3. 組相聯映射
  • 原理
    • Cache分為組,組間直接映射,組內全相聯。
    • 主存塊映射到固定組,組內任意行。
  • 地址解析
    • 主存地址:tag + 組號(g位) + 塊內地址(b位)
    • 組數2?,組內行數(路數)決定關聯度。
  • 例題:主存地址tag計算
    • 條件:Cache 128KB,每行16B,8路組相聯,主存地址1234567H,字節編址。
    • 解題:
      • 總行數:128KB / 16B = 21? / 2? = 213。
      • 組數:213 / 8 = 21? → 組號10位。
      • 塊內地址:16B = 2?字節 → 4位。
      • 主存地址:7位16進制 = 28位二進制。
      • tag位:28 - 10 - 4 = 14位。
    • 答案:tag位14位。
    • 易錯點:字節編址影響塊內地址,路數影響組號位數。

四、關聯度與比較器

1. 關聯度
  • 定義:主存塊可映射的Cache位置數。
    • 直接映射:關聯度1(固定1行)。
    • 全相聯:關聯度=Cache行數(任意行)。
    • 組相聯:關聯度=組路數(組內任意行)。
2. 命中率與時間
  • 命中率:直接映射最低,全相聯最高。
  • 命中時間:直接映射最短(1比較),全相聯最長(全行比較)。
3. 比較器
  • 功能:比較tag位,位數等于tag位數。
  • 數量
    • 直接映射:1個(精確定位)。
    • 全相聯:Cache行數個(全行比較)。
    • 組相聯:路數個(組內比較)。

五、Cache替換算法

1. LRU(最近最少用)
  • 原理:替換近期最少使用的塊。
  • 實現
    • 每行有LRU計數器,計數值高表示最少使用。
    • 命中:訪問行計數器清0,其他低于其值的加1。
    • 未命中有空間:新行計數器置0,其他加1。
    • 未命中無空間:淘汰最大計數行,新行置0,其他加1。
  • 計數器位數:?log?(組路數)?。
2. 其他算法
  • FIFO:淘汰最早裝入的塊。
  • LFU:淘汰引用次數最少的塊。
  • 隨機替換:隨機選擇。

六、Cache一致性

1. 寫命中
  • 全寫法(直寫)
    • 同時更新Cache和主存。
    • 優勢:一致性強。
    • 劣勢:每次寫訪問主存,速度慢。
  • 回寫法
    • 只更新Cache,替換時寫回主存。
    • 控制位:臟位(1位),標記是否修改。
    • 優勢:減少主存訪問。
    • 劣勢:需額外存儲臟位。
2. 寫不命中
  • 寫分配法
    • 更新主存并裝入Cache。
    • 常與回寫法配合,提高后續命中率。
  • 非寫分配法
    • 僅更新主存,不裝入Cache。
    • 常與全寫法配合,簡單但后續可能不命中。
3. 方法搭配
  • 回寫法+寫分配法:效率高,符合Cache設計。
  • 回寫法+非寫分配:效率低,數據不裝入Cache。
  • 全寫法:搭配寫分配或非寫分配,效率相當,因始終寫主存。

七、總結

  • 局部性原理是Cache設計基礎,時間局部性和空間局部性決定數據預存策略。
  • Cache工作依賴地址映射(直接、組相聯、全相聯)、有效位和替換算法(如LRU)。
  • 命中率與時間:高關聯度提升命中率,但增加比較時間。
  • 一致性:全寫法保證強一致性,回寫法+寫分配法效率更高。
  • 例題解析
    • 命中率:95%(950/1000)。
    • 直接映射地址劃分:832位(12位tag+1位有效位×64行)。
    • 組相聯tag計算:14位(128KB,16B/行,8路)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87290.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

I/O 線程 7.3

前言 以下: 概述 1.基礎 2.代碼演示 3.練習 4.分析題 1.基礎 一、線程基礎概念 并發執行原理 通過時間片輪轉實現多任務"并行"效果 實際為CPU快速切換執行不同線程 線程 vs 進程 線程共享進程地址空間,切換開銷更小 進程擁有獨立資源&am…

MySQL JSON數據類型完全指南:從版本演進到企業實踐的深度對話

📊 MySQL JSON數據類型完全指南:從版本演進到企業實踐的深度對話 在當今數據驅動的時代,MySQL作為最受歡迎的關系型數據庫之一,不斷演進以滿足現代應用的需求。JSON數據類型的引入,讓MySQL在保持關系型數據庫優勢的同時…

BI × 餐飲行業 | 以數據應用重塑全鏈路業務增長路徑

在競爭激烈的餐飲行業中,數據已成為企業保持競爭力的關鍵資產。通過深入分析顧客數據,餐飲企業能夠洞察消費者的需求和偏好,從而提供更加精準和個性化的服務。此外,利用數據優化業務管理,降低成本,并提高運…

【學習線路】機器學習線路概述與內容關鍵點說明

文章目錄 零、機器學習的企業價值一、基礎概念1. 機器學習定義2. 學習類型3. 學習范式 二、核心算法與技術1. 監督學習2. 無監督學習3. 模型評估與優化 三、深度學習與神經網絡1. 神經網絡基礎2. 深度學習框架3. 應用場景 四、工具與實踐1. 數據處理2. 模型部署3. 機器學習的生…

Linux 命令:cp

Linux cp 命令詳細教程 cp 是 Linux 系統中最常用的命令之一,用于復制文件或目錄。它可以將源文件/目錄復制到指定的目標位置,支持批量復制、強制覆蓋、保留文件屬性等功能。下面詳細介紹其用法。資料已經分類整理好:https://pan.quark.cn/s…

java分頁插件| MyBatis-Plus分頁 vs PageHelper分頁:全面對比與最佳實踐

MyBatis-Plus分頁 vs PageHelper分頁:全面對比與最佳實踐 一、分頁技術概述 在Java持久層框架中,分頁是高頻使用的功能。主流方案有: MyBatis-Plus分頁:MyBatis增強工具的內置分頁方案PageHelper分頁:獨立的MyBatis…

PROFINET轉MODBUS TCP網關在機械臂通信操作中的應用研究

在特定的汽車零部件生產工廠焊接生產線上,機械臂被應用于焊接作業,其控制體系基于Profinet協議。同時,工廠的自動化控制體系以西門子S7-1200PLC為核心,通過ModbusTCP協議實現數據交換。為實現焊接過程的自動化控制以及生產數據的實…

Mac中如何Chrome禁用更新[update chflags macos]

寫在前面 在 macOS 系統中,系統更新提示的小紅點常常讓人不勝其擾。 尤其是當你希望保持現有系統的穩定性,或因兼容性問題暫不想升級時,這個小紅點就像一個頑固的提醒。 - windowsMac版直接刪除更新程序, 有效 cd ~/Library/Google/Googl…

LoRA使用-多個LoRA

LoRA的風格分類 不用去記它有什么很特別的風格,簡單來說基礎模型就像一個全能畫手,什么都能畫,而LoRA是在某個風格中經過特訓的它的一個分身。使得它更精通該風格。 關于LoR風格分類:提示詞撰寫公式 Checkpoint&LoRA對比 訓…

牛客刷題 — 【排序】[NOIP2012] 國王的游戲(高精度結構體排序)

1.題面:傳送門 2. 思路: 相鄰的兩個大臣的先后順序只會互相影響,并不會影響其他人的金幣數。 假設前 i-1 個人左手上的數乘積為 s 。 ① 若 A 大臣排在B 大臣的前面,則: s 此時的金幣數最大值為 。 ② 若B大臣排…

grpc 和限流Sentinel

基于gRPC的微服務通信模塊技術方案書 1. 總體架構設計 #mermaid-svg-TiN9cudEfW5mCWHm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TiN9cudEfW5mCWHm .error-icon{fill:#552222;}#mermaid-svg-TiN9cudEfW5mCWHm…

經典灰狼算法+編碼器+雙向長短期記憶神經網絡,GWO-Transformer-BiLSTM多變量回歸預測,作者:機器學習之心!

經典灰狼算法編碼器雙向長短期記憶神經網絡,GWO-Transformer-BiLSTM多變量回歸預測,作者:機器學習之心! 目錄 經典灰狼算法編碼器雙向長短期記憶神經網絡,GWO-Transformer-BiLSTM多變量回歸預測,作者&#…

VGG Image Annotator (VIA):一款免費的數據標注軟件介紹與使用

VGG Image Annotator (VIA):一款免費的數據標注軟件介紹與使用 在計算機視覺領域,數據標注是訓練機器學習模型的基礎步驟之一,而標注工具的選擇直接影響標注的效率和準確性。眾多標注工具中,VGG Image Annotator (VIA) 是一個開源…

CSS實現百分比水柱圖

背景 在echarts沒發現有可以直接使用的展示百分比的柱形圖,只好自己封裝一個組件使用 實現思路 一、圖形拆解 要實現的組件是一個 可配置的圓柱形液柱圖組件,常用于展示比例進度,比如任務完成度、指標達成率等。把圖拆成最小單元然后拼接起來&#x…

詳解 rzsz 工具:Windows 與 Linux 文件傳輸

(Linux之軟件包管理器(CentOS系統) —— yum-CSDN博客)rzsz工具之前我在這篇文章中介紹過,現在重新詳細介紹一下該工具。rzsz 是一個用于在 Windows 和 Linux 系統之間傳輸文件的工具集,通常通過終端模擬器…

網絡編程1(UDP)

網絡編程套接字(socket api) 了解了網絡的一些概念,接下來就要進行網絡中的跨主機通信,了解網絡中的一些API,這里談到的API都是針對傳輸層進行的,這是因為我們編寫的代碼是在應用層,而傳輸層就…

【電機】定點線性映射

這是一個定點數線性映射的問題,通常用于將浮點型的物理量(如速度、位置、扭矩)轉換為嵌入式系統中使用的整型數據格式,便于通過 CAN 總線或其它通信協議發送給電機控制器。 我們來逐步解析這個過程,并以“速度”為例說…

Spring Cloud 微服務(遠程調用與熔斷機制深度解析)

📌 摘要 在微服務架構中,服務之間的遠程調用是構建分布式系統的核心環節。然而,隨著服務數量的增加和網絡復雜度的提升,調用失敗、延遲高、異常等問題變得越來越頻繁。 為此,Spring Cloud 提供了強大的遠程調用組件 …

electron-vite 抽離config.js

1、將config.js 放到resources下的config目錄下 module.exports {url: http://192.168.1.17:8000,wsUrl: ws://192.168.1.17:8000, }2、在preload.js 暴露讀取API src/preload/index.js(或你的preload入口) const fs require(fs); const path require(path);function getCo…

MySQL Undo Log 深度解析:事務回滾與MVCC的核心功臣

引言 作為MySQL的“數據后悔藥”和“歷史版本檔案館”,Undo Log(回滾日志)在事務處理和并發控制中扮演著至關重要的角色。今天咱們就從底層原理出發,結合實際場景,把Undo Log的“里里外外”說個明白! 一、…