CHI Read传输——CHI(3)

news2024/11/19 20:28:17

目录

一、Read操作概览

二、DMT(Direct Memory Transfer)

三、DCT (Direct Cache Transfer)

四、without Direct Data Transfer

五、ReadNoSnp and ReadOnce* structure with DMT


本篇我们来介绍一下CHI传输类型中的Read

一、Read操作概览

read操作有以下几种:

名称

描述

ReadNoSnp, ReadNoSnpSep

对不可监听的(non-snoopable)地址区域的读取请求。(其余都是对可监听snoopable)地址区域的读取请求。

ReadNoSnp支持RN-ICNICN-SN的通信

ReadNoSnpSep 仅支持ICN-SN的通信

ReadOnce

只是读取一次数据临时用一下,无需保存到本地的cache中。

ReadOnceCleanInvalid

ReadOnce后,期望是将所有的cacheline无效掉(不强制),状态变为invalid,如果cachelinedirty,则需要将dirty数据写回内存。

ReadOnceMakeInvalid

ReadOnce后,期望是将所有的cacheline无效掉,状态变为invalid,如果cachelinedirty,直接丢弃。

ReadClean

返回的数据必须是clean的(UCSC

ReadNotSharedDirty

返回的数据不能是SharedDirty的状态,可以是UCUDSC

ReadShared

返回的数据可以是UCUDSCSD

ReadUnique

返回的数据可以是UCUD

ReadPreferUnique

返回的数据最好是unique,但是shared也行

MakeReadUnique

返回的数据是unique, 典型的用法是,Requester拥有cacheline,并希望获得写cache line的权限。

其中ReadNoSnp, ReadNoSnpSep用于对不可监听区域的访问 ,例如访问main memory

ReadNoSnpReadOnce可以将读到的数据保留在local cache,但该份数据不再保持一致性

ReadOnceCleanInvalid相对ReadOnce的优点是如果cacheline的数据在近期不会使用,该命令可以将cacheline数据刷到memory去,从而提高cache利用率;

ReadOnceMakeInvalid相对ReadOnce的优点是如果cacheline的数据以后都不会使用,该命令可以将cacheline的数据失效掉,从而提高cache利用率且减少不必须要的WriteBackmemory操作。

对于可监听(snoopable)的读操作,可以由DMT和DCT两种方式完成

二、DMT(Direct Memory Transfer)

是指,SN直接将数据返回给Requester

它支持的操作有:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

步骤如下:

1、Requester通过REQ通道发送一个snoopableread request

2、ICN通过REQ通道发送一个ReadNoSnp给相应的SN

3、SN,作为completer,在RDAT通道上,使用CompData将读取的数据和任何关联的事务响应直接转发给的请求者,协议规定,completer必须在接收request之后才能发送CompData

4、Requester通过SRSP通道使用CompAck返回一个响应给ICN,表示交易完成。协议规定requester至少需要接收到一个CompData包以后才能发送CompAck

以ReadShare操作为例,我们来看一下具体的流程

1、RN-F0 sends a Read request to HN-F

2、HN-F sends a Snoop request to RN-F1.

3、HN-F sends a Read request to SN-F after receiving the Snoop response from RN-F1, which guarantees that RN-F1 has not responded with data.  

4、SN-F sends a Data response directly to RN-F0.

5、RN-F0 sends CompAck to HN-F as the Request is ReadShared and requires CompAck to complete the transaction.

RN-F0在向HN发送读请求后,HN向其他的RN发送snoop,查询该cache line在其他RN中的状态

RN-F1返回的response是SnpResp_I,对Snoop的Response,其结果是I,即RN-F1中存在需查询的cache line,但是该cache line中的数据是无效的。

因此,HN需要去main memory(SN)中去读

读到的数据直接返回给RN-F0,不必经过HN

由于数据返回后,只有RN-F0会保存,因此该数据的状态是UC(Compdata_UC)

三、DCT (Direct Cache Transfer)

与DMT向对立的是DCT,区别在于,DCT是其它RN-F直接返回数据给原始Requester

它与DMT支持的操作相同:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

两者的区别再有,DMT从其他RN中读取数据失败,从而从SN中读取数据返回给RN;而DCT操作,在其他RN中成功读取到了有效数据

步骤如下:

1、Requester过REQ通道发送一个snoopableread request

2、ICN通过SNP通道发送一个Snp[*]FwdrequestRN-F

3、该RN-F作为completer,在RDAT通道上,使用CompData将读取的数据和任何关联的事务响应直接转发给的请求者;

4、该RN-F通过SRSP通道,返回一个SnpRespFwdedICN,表示已经把读数据发给了requester。协议规定,completer必须在接收snoop之后才能发送CompData;

5、Requester通过SRSP通道使用CompAck返回一个响应给ICN,表示交易完成。协议规定,一旦接收到读取数据的第一个数据包,就可以发送CompAck

还是以ReadShare操作为例,我们来看一下具体的流程

1、RN-F0 sends a Read request to HN-F

2、HN-F sends a SnpSharedFwd, a Forwarding Snoop request to RN-F1.

3、RN-F1 cache line state transitions from UC to SC.

4、RN-F1 forwards CompData_SC response to RN-F0.

5、RN-F1 also sends a SnpResp_SC_Fwded_SC Snoop response to HN-F that indicates:

        (1)The data was forwarded to the Requester.

        (2)The final state of the cache line in the snooped cache is SC.

6、After receiving the CompData response RN-F0 sends a CompAck response to HN-F to conclude the transaction.

我们可以看到,HN在snoop RN-F1后,RN-F1表示它有想要访问的数据,此时RN-F1中相应的cache line状态是UC;

那么当它把该数据传输给RN-F0后,该数据就不唯一了,cache line状态需要从UC转变为SC;

同时,RN-F1要告诉HN,它已经将数据发送给RN-F0了,如果是snoop directory的话,HN还要将directory进行更新

RN-F0接收到的数据,也是它和RN-F1同时保存的,因此cache line状态是SC

在上图中,我们看到“SnpResp_SC_Fwded_SC”,它是什么意思呢?

这是一种response,Snoopee发送数据给Requester,但不需要发送数据给Home,则发送该类型的snoop responseHome,指明被snoop后的状态和forwardRequester的数据状态。

同类型的还有:

SnpResp_I_Fwded_I
snoop cache line 处于 I 状态;
I 状态 Forward 数据给 Requester 。(即, Requester 收到 CompData_I
SnpResp_I_Fwded_SC
snoop cache line 处于 I 状态;
SC 状态 Forward 数据给 Requester 。(即, Requester 收到 CompData_SC
SnpResp_I_Fwded_UD_PD
snoop cache line 处于 I 状态;
UD 状态 Forward 数据给 Requester ,更新 Memory 的责任传递给了 Requester
SnpResp_SC_Fwded_SC
snoop cache line 处于 SC 状态;
SC 状态 Forward 数据给 Requester

不同的response由不同的Opcode来表示,例如:

我们看到,DCT和DMT在HNsnoop RN时,分别用了两种操作:SnpSharedFwd, SnpShared

这两种名称的操作执行的内容是一致的:Snoop request to obtain a copy of the cache line in Shared state while leaving any cached copy in Shared state,and must not leave the cache line in Unique state.

区别在于SnpSharedFwd is permitted to be only sent to one RN-F.

四、without Direct Data Transfer

Requester所得到的数据可以由HN提供

它与DMT、DCT支持的操作相同:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

步骤如下:

1、The Requester sends a Snoopable Read request on the REQ channel

2、The Completer returns the read data and any associated transaction response with the CompData opcode on the RDAT channel

3、Requester must return an acknowledgement, using the CompAck opcode on the SRSP channel to indicate that the transaction has completed.

以ReadClean操作为例,我们来看一下具体的流程

1、RN-F1 has the cache line in UDP state. RN-F1 responds to the snoop with a snoop response with partial cache line data and passes responsibility for updating memory.

2、HN-F waits for the data response from memory, merges the partial snoop response data with the data response from memory, and sends the resultant data to the Requester.

3、HN-F updates memory as the responsibility for updating memory is not passed on to the Requester.

readclean、readshared区别:readclean返回的数据,必须是clean的,例如:UCSC

Readshared返回的数据,可以是dirty的,例如:UCUDSC,不能是SD

五、ReadNoSnp and ReadOnce* structure with DMT

ReadNoSnp,ReadOnce*它们的共同点是非snoopable,但是ReadOnce*可以snooping其他master

ReadOnce* DCT ,但是ReadNoSnp没有

支持的操作:

ReadNoSnp,    

ReadOnce,    

ReadOnceCleanInvalid

ReadOnceMakeInvalid

步骤如下:

1、Requester 发送request

2、如果requestOrder字段表示需要ordering,则当order建立时,需要返回ReadReceipt (什么是order建立时?这里买个管关子,后面的文章会解释)

3、ICN向SN发送ReadNoSnp请求

4、如果ReadNoSnp requestOrder[1:0]==0b01,则SN返回ReadReceipt

5、作为CompleterSN,在RDAT channel上将opcode CompDate的读数据、response返回给requester

6、如果ExpCompAck==1,则Requester必须返回CompAck,表示传输完成(当接收到读数据的第一个数据包时,就可以返回CompAck

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自适应星空背景个人导航单页(附带源码)

自适应星空背景个人导航单页 效果图部分源码领取源码下期更新预报 效果图 部分源码 function Star(id, x, y) {this.id id;this.x x;this.y y;this.r Math.floor(Math.random() * 2) 1;var alpha (Math.floor(Math.random() * 10) 1) / 10 / 2;this.color "rgba(…

QColor官网文档简介

颜色可以用不同的模型来进行表示,常见的有RGB,HSV或者CMYK.QColor基于RGB值创建颜色,如果要转接到HSV或者CMYK需要使用转接函数toHsv() toCmyk() 返回期望格式的副本 get...和set...函数具体参见文档用isValid()检查RGB颜色是否合法颜色组成部分可以单独检索QRgb是一种无符号整…

第98天:权限提升-WIN 全平台MSF 自动化CS 插件化EXP 筛选溢出漏洞

目录 思维导图 前置知识 案例一: Web&Win2008-人工手动&全自动msf-筛选&下载&利用 手动 全自动msf 案例二: Web&Win2019-CS 半自动-反弹&插件&利用 思维导图 前置知识 提权方式,这里讲的是溢出漏洞 windows权限 常…

⌈ 传知代码 ⌋ 高速公路车辆速度检测软件

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

C++学习/复习8--STL简介/六大组件/缺陷

一、STL简介 二、六大组件 三、面试题 四、STL缺陷

实现按块复制元素的进阶技巧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、按块复制元素的重要性 二、使用LED模块创建数组并复制 三、实现按块复制的具体步骤 四…

粤嵌—2024/5/28—最大正方形(✔)

代码实现&#xff1a; 方法一&#xff1a;模拟——超时 int maximalSquare(char **matrix, int matrixSize, int *matrixColSize) {int maxSide 0;if (matrix NULL || matrixColSize NULL || matrixSize < 0 || matrixColSize[0] < 0) {return 0;}for (int i 0; i &l…

Cesium For Unity 在Unity中无法下载的问题

Unity 下载失败&#xff0c;提供百度网盘“com.cesium.unity-1.10.0.tgz”下载链接 链接&#xff1a;https://pan.baidu.com/s/1PybXQ8EvkRofOKD6rSN66g?pwd1234 提取码&#xff1a;1234 导入方法&#xff1a; 1.打开PackageManager;Window-PackageManager 2.在PackageMan…

Golang | Leetcode Golang题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; func maxDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}queue append(queue, root)ans : 0for len(queue) > 0 {sz : len(queue)for sz > 0 {node : queue[0]queue queue[1:]if node.Left ! nil {queue…

酒店报修进入智能时代:无纸化系统的全面革新

在这个信息爆炸的时代&#xff0c;面对酒店的设备故障你还在用纸质工单来报修吗&#xff1f;那简直像是石器时代的遗风&#xff01;一场酒店服务的革命性变革正在悄然兴起&#xff0c;它将彻底颠覆你对传统报修方式的认知。想象一下&#xff0c;当客人在房间遇到水龙头漏水&…

使用大模型LLM实现销售AI

想象一个场景&#xff0c;客户通过聊天窗口咨询一款产品。销售AI首先使用LLM解析客户的问题&#xff0c;然后通过智能代理查询数据库获取产品详细信息&#xff0c;并以自然而友好的方式回应客户。 在对话过程中&#xff0c;AI可以评估客户的兴趣&#xff0c;并主动提供促销信息…

太极图形学——渲染——光线追踪概念部分

程序动画和渲染 程序动画和渲染有一些类似的地方&#xff0c;都是找到合适的像素并填上颜色&#xff0c;但是要把一个图片渲染的好看是有一些规则来指导的 光线追踪包含哪些呢 果壳中的光线追踪器 实时条件下的光线追踪&#xff1a;需要进行光栅化的处理 离线条件下做cg的话…

Hololens 2 新建自定义按钮

官方链接地址 1、创建Cube 2、添加PressableButton脚本&#xff0c;并点击AddNearin… 3、把Cube拖入到MovingButtonVisuals变量中 4、点击NearInteractionTouchable组件&#xff08;这个组件是添加和上一个脚本绑定的&#xff0c;自动添加上来的&#xff09;上的Fix… 5、…

探索无限乐趣,尽在淘宝扭蛋机小程序

随着科技的快速发展和人们消费习惯的不断改变&#xff0c;小程序已经成为我们日常生活中不可或缺的一部分。为了满足广大用户对新鲜、有趣、互动性强的购物体验的追求&#xff0c;淘宝特别推出了全新的扭蛋机小程序&#xff0c;让您在购物的同时&#xff0c;也能享受到扭蛋带来…

4步成功将三方库——speexdsp移植到OpenHarmony

四步实现三方库移植&#xff1a; 1、在Linux下编译要移植的三仓库&#xff0c;分析编译过程&#xff1b; 2、将要移植的三方库加入编译框架中以及产品引用&#xff1b; 3、增量编译出动态链接库和可执行文件推送到开发板上&#xff1b; 4、在开发板上验证移植是否成功、API接口…

【qt】QTableWidget 表格组件

QTableWidget 表格组件 一.应用场景二.初始化表格1.界面拖放2.设置列数3.表头的处理①&#xff1a;表头装的是啥②&#xff1a;设置为标头③&#xff1a;设置列宽的模式 4.设置行数5.添加每个单元格①&#xff1a;设置单元格信息②&#xff1a;添加单元格③&#xff1a;单元格附…

P148--章节作业1

编辑 编辑 public class Main {public static void main(String args[]){double yxq100000;int cishu0;while(true) {if(yxq > 50000) {yxq yxq - yxq * 0.05;cishucishu1;}else if(yxq > 1000){yxq yxq - 1000;cishucishu1;}else{break;}}System.out.print(cishu);} …

安装部署统信UOS服务器操作系统1070e

原文链接&#xff1a;安装部署统信UOS服务器操作系统1070e Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于安装部署统信UOS服务器操作系统1070e的文章。统信UOS是一款基于Linux的国产操作系统&#xff0c;以其安全性和稳定性受到广泛关注。本文将详细介绍如何安…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中&#xff0c;会去创建AudioPolicyManager对象&#xff0c;进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…

Java常用工具类、包装类

1、工具类的设计 一般地&#xff0c;把那些完成通用功能的方法分类存放到类中&#xff0c;这些类就叫工具类。 工具类起名&#xff1a;XxxUtil、XxxUtils、XxxTool、XxxTools等&#xff0c;其中Xxx表示一类事物&#xff0c;比如ArrayUtil、StringUtil、JdbcUtil。 工具类存放的…