AMBA-CHI协议详解(十九)

文章目录
- 4.6 Silent cache state transitions
- 4.7 Cache state transitions at a Requester
- 4.7.1 Read request transactions
- 4.7.2 Dataless request transactions
- 4.7.3 Write request transactions
- 4.7.4 Atomic transactions
- 4.7.5 Other request transactions
4.6 Silent cache state transitions
缓存可以由于内部事件而改变状态,而无需通知系统的其余部分。
合法的静默缓存状态转换如下表所示。 在某些情况下,可以但不要求发出事务以指示转换已发生。 如果发出了这样的事务,则缓存状态转换对互连是可见的,并且不被归类为静默转换。
下表中描述的RN-F动作为Local sharing,描述了RN-F将Unique缓存行指定为Shared的情况,有效地忽略了缓存行对RN-F保持Unique的事实。例如,当RN-F包含多个内部代理并且缓存行在它们之间共享时,就会发生这种情况。
对于静默缓存状态转换:
- Cache eviction and Local sharing转换可以在任何时刻发生。
- Store和Cache Invalidate转换只能作为故意操作的结果发生,在核心的情况下,这是由执行特定程序指令引起的。
下表备注列指示如何使静默缓存转换变为非静默或在接口上可见。

缓存状态从UC变为UCE是不允许的。
静默转换的序列也可以发生。 任何导致缓存行处于UD、UDP或SC状态的静默转换都可以进行进一步的静默转换。
4.7 Cache state transitions at a Requester
本节指定以下请求事务的缓存状态转换和完成响应:
- Read request transactions
- Dataless request transactions
- Write request transactions
- Atomic transactions
- Other request transactions
4.7.1 Read request transactions
下表显示了请求者的缓存状态转换及读取请求事务的完成响应,除了 MakeReadUnique 事务。
从属节点对请求者的数据响应中的缓存状态为 UC,即 CompData_UC,无论原始请求类型如何。 请求者必须忽略在对 ReadNoSnp、ReadOnce、ReadOnceCleanInvalid 和 ReadOnceMakeInvalid 的 CompData响应中的缓存状态,并隐式假设缓存状态值为 I。
在非 DMT 数据传输中,CompData 响应从从属发送到主节点,响应中的缓存状态可以是 I 或 UC。通常,预计从属的设计可以通过始终使用 UC 来简化。然后,主节点将带有适当缓存状态值的 CompData 发送给请求者。



a. 对于ReadOnce*, ReadNotSharedDirty and ReadShared事务,请求者在初始状态为 UCE 时,必须在请求未完成时不将缓存行升级为 UDP 或UD。
b. 处于初始状态 SD 的请求者如果接收CompData_SC 或DataSepResp_SC响应,必须保持在 SD 状态。 同样,使用Snoop filter来跟踪请求者的缓存状态的主节点,必须不根据对请求者的响应中的状态来降低Snoop filter中缓存行的状态。
c. 如果缓存状态为 UD 或 SD,则从内存接收到的数据必须被丢弃;如果缓存状态为 UDP,则必须合并从内存接收到的数据。当缓存状态为 SC 或 UC 时,从内存接收到的数据必须与缓存的数据相同。
MakeReadUnique transaction
本节描述了请求者在 MakeReadUnique 和 MakeReadUnique(Excl) 事务中的允许响应和缓存状态转换。
Permitted responses
下表显示了 MakeReadUnique 事务中的允许响应。
允许响应的一些关键特性包括:
-
没有数据的响应 Comp_UD_PD 表示请求者正在承担Dirty缓存行的责任。
当请求者持有缓存行的SharedClean副本,而另一个代理持有SharedDirty时,这种情况可能会发生。 主节点使SharedDirty无效,例如使用 SnpMakeInvalid 事务,然后将脏缓存行的责任传递给发出 MakeReadUnique 事务的请求者。 -
仅在响应Exclusive版本的 MakeReadUnique 时,才允许具有 SC 缓存状态的响应。
Comp_SC 是具有 SC 缓存状态的响应的一个示例,当主节点确定独占存储失败,但 snoop filter或对请求者的 SnpQuery snoop 的响应表明请求者仍持有缓存行的副本,同时系统中还有另一个共享副本时,会发送该响应。
上述情况可能发生在非全地址 PoC 独占监视器中。 一个LP可以通过另一个LP对不同地址位置执行独占存储来重置监视位。 对不同地址的存储不会使第一个请求者正在进行独占访问的地址位置的缓存副本失效。
下表显示了在非独占和独占MakeReadUnique事务中允许的响应。


下表显示了在独占MakeReadUnique事务中额外允许的响应。

预期的Snoop
主节点使用Snoop来使Snoopee的缓存行失效,以响应非独占的 MakeReadUnique 或通过独占检查的独占 MakeReadUnique,具体如下:
- 主节点预计使用 SnpCleanInvalid 窥探:
— 主节点可以使用 SnpUnique 代替 SnpCleanInvalid。
— 如果主节点确定请求者丢失了缓存行的缓存副本,则可以使用 SnpUniqueFwd。
— 如果主节点确定Snoopee没有缓存行的脏副本,则也可以使用 SnpMakeInvalid 代替 SnpCleanInvalid。
Cache line state transitions
MakeReadUnique 事务后缓存行的最终状态取决于事务响应收到之前缓存行的状态。 这可能与事务发出时缓存行的状态不同。
对于 MakeReadUnique,请求者必须保留缓存行的副本,除非它收到invalidating snoop。
- Invalidating snoops包括 SnpUnique、SnpUniqueFwd、SnpCleanInvalid、SnpMakeInvalid、SnpUniqueStash 和 SnpMakeInvalidStash。
- 请求者可以将 SnpPreferUnique 和 SnpPreferUniqueFwd 视为invalidating或non-invalidating。 主节点可以通过检查snoop响应来确定这些snoop如何被Snoopee处理。
- 所有其他snoop都是non-invalidating的,请求者必须保留缓存行的副本。
如果主节点没有 SF,或者 SF 不精确,并且主节点无法确定请求者在事务完成时是否仍然拥有缓存行的副本,则主节点必须假设缓存行在请求者处丢失,并在响应中提供数据。
在持有 SD 状态的行时,接收到带有数据的响应的请求者必须使用其自己的缓存行副本,而不是响应中返回的副本。
一个请求者在持有SD状态的缓存行时接收到带有数据的响应,这意味着系统中没有snoop filter或snoop filter不精确。 在这种情况下,返回的响应数据可能是过时的。
如果请求者知道没有snoop filter,那么它可以使用CleanUnique事务,而不是MakeReadUnique,以避免在缓存行未被其他代理缓存时进行不必要的内存读取。
在没有snoop filter的情况下,使用CleanUnique事务可以避免不必要的内存读取。 不必要的内存读取发生在缓存行仍然在请求者处缓存,但系统中没有snoop filter,或者没有使用SnpQuery snoop ,并且系统中没有来自其他代理的缓存副本。 然而,在事务进行中,如果缓存行因snoop 而丢失,使用CleanUnique事务将导致请求者需要发出另一个事务。
响应规则为:
- 对非独占MakeReadUnique的响应中的缓存状态必须是Unique的。
- 对独占MakeReadUnique的响应中的缓存状态可以是Unique的或Shared的。
- 对独占和非独占MakeReadUnique的响应中的缓存状态不得包含Shared Dirty。
- 对于每个允许的组合完成和数据响应,允许对应的单独完成和数据响应。
下表展示了
• 初始缓存状态。
• 在接收到事务响应之前的缓存状态。
• 每个可能响应组合的最终状态。


4.7.2 Dataless request transactions
下表显示了请求者的缓存状态转换及Dataless请求事务的完成响应。

在执行CleanInvalid、CleanInvalidPoPA、MakeInvalid或Evict事务之前,缓存状态可以是UC、UCE或SC。然而,要求在发出事务之前,缓存状态必须转换为I状态。
4.7.3 Write request transactions
下表显示了请求者的缓存状态转换、写数据响应,以及写入和相应的组合写请求事务的完成或单独完成和 DBIDResp 响应。


a. 在写入待处理时,可能会收到一个snoop,这会导致缓存行状态在 WriteData 或 CompAck 响应之前发生变化。
b. 如果主节点决定不请求数据,则发送 Comp。
c. 一旦请求发送,请求者被允许将缓存状态保持为 UC,但不得修改缓存行。
在 WriteClean 事务完成后,处于Unique状态的缓存行可以立即转换为Dirty状态。
4.7.4 Atomic transactions
下表显示了请求者的缓存状态转换,以及原子事务的完成和响应。

4.7.5 Other request transactions
DVMOp 和 PrefetchTgt 请求没有与之相关的缓存状态转换。
相关文章:
AMBA-CHI协议详解(十九)
文章目录 4.6 Silent cache state transitions4.7 Cache state transitions at a Requester4.7.1 Read request transactions4.7.2 Dataless request transactions4.7.3 Write request transactions4.7.4 Atomic transactions4.7.5 Other request transactions 4.6 Silent cach…...
如何把windows机器作为SSH客户端免密登录
要在Windows机器上配置免密SSH登录,你需要生成一个SSH密钥对,并将公钥添加到你要登录的服务器的~/.ssh/authorized_keys文件中。以下是具体步骤: 在Windows上生成SSH密钥对 打开PowerShell或命令提示符: 你可以通过搜索栏输入“P…...
sklearn中的决策树-分类树:重要参数
分类树 sklearn.tree.DecisionTreeClassifier sklearn.tree.DecisionTreeClassifier (criterion’gini’ # 不纯度计算方法, splitter’best’ # best & random, max_depthNone # 树最大深度, min_samples_split2 # 当前节点可划分最少样本数, min_samples_leaf1 # 子节点最…...
25林业研究生复试面试问题汇总 林业专业知识问题很全! 林业复试全流程攻略 林业考研复试真题汇总
25 林业考研复试,专业面试咋准备?学姐来支招! 宝子们,一提到林业考研复试面试,是不是就慌得不行,感觉老师会扔出一堆超难的问题?别怕别怕,其实林业考研复试就那么些套路,…...
DeepSeek最新开源动态:核心技术公布
2月21日午间,DeepSeek在社交平台X发文称,从下周开始,他们将开源5个代码库,以完全透明的方式与全球开发者社区分享他们的研究进展。并将这一计划定义为“Open Source Week”。 DeepSeek表示,即将开源的代码库是他们在线…...
Electron通过ffi-napi调用dll导出接口
electron使用ffi-napi环境搭建 附打包好的ffi-napi可以直接放到项目目录下使用,避免以后麻烦 一、安装node.js Node.js官网:https://nodejs.org/zh-cn/download,选择LTS长期稳定版本即可 需要注意Node.js 区分32和64位,32位版…...
【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
文章目录 六大比较类排序算法(插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序)前言1. 插入排序算法描述代码示例算法分析 2. 选择排序算法描述优化代码示例算法分析 3. 冒泡排序算法描述代码示例算法分析与插入排序对比 4. 希尔排序算法描…...
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【Java学习】抽象类与接口
面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量: 成员方法: 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法,只有在…...
SpringBoot中实现限流和熔断功能
我们将使用Java的ScheduledExecutorService来实现一个简单的令牌桶算法(Token Bucket Algorithm),并结合一个自定义的服务类来处理第三方API调用。 1. 创建限流器 首先,创建一个简单的限流器类: import java.util.concurrent.*;public class SimpleRateLimiter {...
61.旋转链表--字节跳动
你应该比你现在强得多 题目描述 给定单链表,要求返回向右移动K位后的新链表 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3]思路分析 计算链表的长度 计算实际需要移动的步数 找到新的头节点 断开链表并重新连接 完整代码 /*** Defini…...
verilog笔记
Verilog学习笔记(一)入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因,主要是因为我是微电子专业的,我需要去学习一门名为verilog的硬件解释语言,由于我是在某西部地区的神秘大学上学,这所…...
c++中sleep是什么意思(不是Sleep() )
sleep 函数在 C 语言中用于暂停程序执行指定的秒数,语法为 sleep(unsigned int seconds)。当 seconds 为 0 时,函数立即返回,否则函数将使进程暂停指定的秒数,并返回实际暂停的时间。 sleep 函数在 C 中的含义 sleep 函数是 C 标…...
Uniapp 开发中遇到的坑与注意事项:全面指南
文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…...
Dify安装教程:Linux系统本地化安装部署Dify详细教程
1. 本地部署 Dify 应用开发平台 环境:Ubuntu(24.10) docker-ce docker compose 安装 克隆 Dify 源代码至本地环境: git clone https://github.com/langgenius/dify.git 启动 Dify: cd dify/docker cp .env.example...
rtsp rtmp 跟 http 区别
SDP 一SDP介绍 1. SDP的核心功能 会话描述:定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商:明确媒体流的类型(如音频、视频)、传输协议(如RTP/UDP)、编码格式(如H.264、Op…...
基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
物体识别系统(识别图片中的物体)
这是一个基于 PyTorch 和 PyQt5 的物体识别程序,使用 Faster R-CNN 模型来识别图片中的物体,并通过图形界面展示识别结果。 1.用户界面 主窗口:包含加载图片、识别、清除按钮,以及图片显示区域和结果展示区域。 图片显示&#…...
数据表的存储过程和函数介绍
文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...
【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
【DeepSeek背后的技术】系列博文: 第1篇:混合专家模型(MoE) 第2篇:大模型知识蒸馏(Knowledge Distillation) 第3篇:强化学习(Reinforcement Learning, RL) 第…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
