芯片存储器层次结构概述

存储器层次结构概述
1. Cache的作用
Cache结构与作用,如图2-5所示。
 
图2-5 Cache结构与作用
介绍一下Cache具有特征。Cache没有程序上的意义,只是为了降低访存延迟;处理器访问Cache和访问存储器使用相同的地址。
Tag存储cache块在主存中的首地址(cache每个字节都给一个地址太浪费,所以cache以块为单位存储数据)。
2. Cache的结构特点
同时存储数据和地址,通过地址的比较判断相应数据是否在Cache中;需要考虑所需要的数据不在Cache中的情况,替换机制,写策略等。例如处理器发送地址Add的高位和cache的地址标记进行比对,如果Add在cache中即为命中,从cache中返回数据,否则从主存读入数据块,返回数据给处理器的同时更新cache,更新cache时要考虑替换策略。Cache结构,如图2-6所示。
 
图2-6 Cache结构
cache有三种主要类型,直接相联、全相联、组相联,这代表了三种不同的内存和cache的映射方式,假设内存和cache都按照相同大小分块,其中内存一共分了32块,cache分了8块。接下来看看内存的每一项内容是如何放到cache中的。
Cache结构三种主要类型,如图2-7所示。
 
图2-7 Cache结构三种主要类型
1)直接相联:每项内存单元只能映射到cache的一个位置,假设要把内存的12号单元放到 cache中,因为 cache只有8个单元,12除以8余数为4,12号单元就只能放在4 号单元,别的地方都不能放。4,12,20,28 号都映射到这个单元,如果冲突了怎么办?那只有替换。这就是直接相联,硬件简单但效率低。
2)全相联:每个内存块都可以放到任何一个 cache行中,4号12号20号28号同时进来都放得下。全相联硬件复杂但效率高。
3)组相联:是直接相联和全相联的折中。以二路组相联为例,0、2、4、6号一路,1、3、5、7号一路,每路4个cache块;12除以4余数为0,既可以把12号单元放在0路的0号单元,也可以放在1路的0号单元(即1号单元)(注意路和组概念不同,组是将两路拆开成单个的,然后将两个两个组合组成了四组)。
3. Cache的优化技术统计
    Cache的优化技术统计,见表2-8。
表2-8 Cache的优化技术统计

优化技术

时效延迟

命中率

命中时间

复杂度

多级cache

+

 

 

2

关键字优先

+

 

 

2

读失效优先

+

 

 

1

合并写缓存

+

 

 

1

牺牲缓存

+

+

 

2

增加块大小

-

+

-

0

增加cache大小

 

+

-

1

增加相联度

 

+

 

1

伪相连、路猜测

 

+

 

2

编译优化

 

+

 

0

非阻塞cache

+

 

 

3

硬件预取

+

+

 

2i, 3d

软件预取

+

+

 

3

小而简单的cache

 

-

+

0

Cache与TLB访问并行

 

 

+

2

流水cache访问

 

 

+

1

 4. 替换策略
即在 cache 放不下时把谁替换出去给新cache 行腾位置。
直接相联 cache 不存在替换谁的问题,因为每个内存块对应到一个 cache行的位置
在全相联和组相联 cache 中,由于每个存储行可以放在 cache 中不同的位置,因此就有替换谁的问题。常见的替换算法有 随机替换、LRU(最近少使用替换) 和 FIFO(先进先出)。
5. 写策略
1) 写命中时:
①写穿透(Write Through):写cache的同时写回内存
②写回(Write Back):只写cache不写内存,cache块被替换时整体写入内存
2) 写失效时(发现写回的地址没在cache):
①写分配:把内存中对应的块读入cache然后更改再写回内存(常与写回配合,很自然的考虑)
②写不分配:直接写入内存(常与写穿透配合)
2.3.2 存储器层次结构示例
1. Cache相关问题
(a) 块的放置:在Cache中,根据不同的策略一个块能被放置在哪里?
①直接映射(Direct Mapping):每个块只能映射到Cache中的特定位置。通过块地址的一部分来决定放置位置。
②组相联映射(Set-Associative Mapping):Cache被划分为多个组,每个组可以容纳多个块。块可以映射到组内的任何位置。
(b) 块的标志:如果一个块在 Cache 中,如何找到它?
①在Cache中找到一个块通常需要使用地址的一部分作为标记(Tag)来识别。
②地址的一部分用于标记块的唯一性,另一部分用于选择Cache中的特定位置。
(c) 块的替换:如果没有命中,哪个块该被替换,列举三种策略?
①最近最少使用(Least Recently Used, LRU):替换最长时间没有被访问的块。
②先进先出(First-In-First-Out, FIFO):替换最早进入Cache的块。
③随机替换:随机选择一个块进行替换。
(d) 写时策略:通常有哪两种基本策略来写 Cache,写缺失时又有哪两种基本策略?
①写回(Write Back)和写通过(Write Through)写回只在块被替换时才将数据写回主存,而写通过则在写操作同时更新Cache和主存。
②写缺失策略
写分配(Write Allocate):在写缺失时,先将整个块从主存读入Cache,然后 进行写操作。
非写分配(Write No-Allocate):在写缺失时,直接更新主存而不将整个块加
载到Cache中。
2. 数组合并
将Key和Value放在一起,而不是两个数组,如图2-8所示。
图2-8 数组合并示例
3. 循环交换
因为二维数组中一行中的数据是相邻的,一列上的数据距离更远,如图2-9所示。
 
图2-9 循环交换示例
4. 循环合并
增加一个循环体内值的重用次数,如图2-10所示。
 
图2-10 循环合并示例
5. 数组分块
    数组分块示例,如图2-11所示。
 
图2-11  数组分块示例
6. 数组分块2
完成双精度浮点数矩阵乘法,X=Y*Z,代码如下。
for (i=0;i<N;i=i+l)
    for(j=0;j<N;j=j+1){
        r = 0;
        for(k=0;k<N;k=k+1){
            r=r+y[i][k]*z[k][j];};
        x[i][j]=r;
    }
假设系统 cache 大小为32KB,矩阵大小N足够大。写出将矩阵按 cache大小分块进行优化的代码,并计算分块前后Y和Z矩阵的 cache 失效次数。
双精度浮点数占用 8 个字节(64位)。
32 KB = 32 * 1024 = 32768 字节
若每个双精度浮点数占用 8 字节,则:32KB 能容纳 32 * 1024 / 8 = 4096 个双精度浮点数。
所以,可以容纳 64 * 64 大小的矩阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899512.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》书,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

MYSQL-DDL操作

点击查看代码 ```plaintext create table tb(id int comment ID,username varchar(20) comment 用户名,name varchar(10) comment 姓名,age int comment 年龄,gender char(1) comment 性别 )comment user测试表</details> ![](https://img2024.cnblogs.com/blog/3619156…

JetBrains IDEA破解后一直跳出激活弹窗

正文 一直跳弹窗是因为选了区域中国,你可以断网,然后到打开设置,搜索区域,选择亚洲。保险起见,保存后先关闭idea,再连接网络,启动IDEA。

三分钟教学:手把手教你实现Arduino发布第三方库

Arduino 发布第三方库的流程包括:构建库的基本框架后将其打包并上传至 GitHub,在 GitHub 上创建 Tag 和 Release 后,提交到 Arduino 库管理器,最后在Arduino IDE进行验证。三分钟教学:手把手教你实现Arduino发布第三方库原文链接: 手把手教你实现Arduino发布第三方库 摘要…

2025-315晚会总结

🔖简介 2025年315晚会曝光了多个行业的消费乱象和违法侵权行为。 主题:“共铸诚信 提振消费”,聚焦食品安全、公共安全、金融安全、数字经济等领域。 核心诉求:打击消费陷阱,推动构建公平、诚信的消费环境。 📢曝光现象 🔒数据安全与隐私侵权非法窃取个人信息涉事企业…

再破难关(BFS)

问题 F: 再破难关 题目描述 OIBH组织派出的黄金十二人+青铜五小强还没有到, 他们只能指望原先的机关能够阻拦住柯南的脚步。柯南打开大门之后发现里面还有一个门, 门上还有一个神奇的锁(-,-) 这是一个4*4的锁, 上面有8个凸起的格子和8个被按下的格子,当且仅当两个格子有公共边…

LLM大模型:OpenManus原理

继deepseek之后,武汉一个开发monica的团队又开发了manus,号称是全球第一个通用的agent!各路自媒体企图复刻下一个deepseek,疯狂报道!然而manus发布后不久,metaGPT团队5个工程师号称耗时3小时就搞定了一个demo版本的manus,取名openManus,才几天时间就收获了34.4K的start…

Day14_TCP三次握手

每日一题 TCP三次握手详解 三次握手(Three-Way Handshake) 是TCP协议建立可靠连接的核心过程,确保通信双方能够正常收发数据并同步初始序列号。以下是详细步骤和原理:1. 第一次握手:SYN(客户端 → 服务器)动作:客户端发送一个TCP报文,设置SYN=1(同步标志位),并生成…

Paimon merge into 实现原理

语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, b = source.b, c = source.c WHEN NOT MATCHED THEN INSERT (a, b, c) values (a, b, c)merge into 实际上是一个语法糖, 相对应的语义也可以通过其他的 sql…

MACD

目录背景和价值用法快线在0轴上方 - 多头较强,否则多头较弱快线上穿慢线 形成金叉,形成多头信号。 快线下穿慢线 形成死叉,形成空头信号顶背离和底背离参考资料 背景和价值 指数平滑移动平均线两个(12和26)均线相交,12EMA上穿26EMA形成金叉,快线从0轴下方上穿0轴上方 用…

python 文件打包成 whl

首先需要安装 wheel, setuptools pip install setuptools wheel简单进行一个打包的例子,项目目录结构如下:# __init__.py def pytest_collection_modifyitems(session, config, items):for item in items:# item.name 用例名称item.name = item.name.encode(utf-8).decode(un…