当前位置: 首页 > news >正文

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) 第…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...