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) 第…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
