CHI中observe响应和order响应的区别

在CHI协议中,每个请求可以生成一个或多个响应,不同响应表示Completer完成不同的操作之后,返回给requestor的通知。Requestor收到响应之后,根据响应类型来判断下一步需要做什么。

1. Observe响应

Observe响应确定一个transaction相对于来自于同一个requestor或其它requestors的 transactions之间的顺序。对于不同的属性,observe保证的地址范围不一致:

  • 对于Cacheable属性:同一个cache line地址和NS属性的,不同cache line地址和NS属性的transaction,它们之间没有observe关系。
  • 对于Non-cacheable或Device:相同的endpoint地址范围,这个endpoint地址范围通常是实现定义的,典型为:
    • 如果用于peripheral device区域,那么是peripheral device大小;
    • 如果用于memory区域,那么是cache line大小。

在CHI协议中有:CompData、DataSepResp、RespSepData、Comp、CompCMO和StashDone。针对不同请求类型(read、write、atomic、dataless等),需要用不同observe响应。本文以Write操作中Comp响应作为代表来举例。

2. Order响应

Order响应决定了requestor何时可以发送下一个需要保序的请求,它针对的是同一个requestor,且order保证的地址不要求。只要requestor收到order响应后,再发送其它的请求,那么completer一定会做好这两笔请求之间的保序。

在CHI协议中有:ReadReceipt、DBIDResp和DBIDRespOrd。本文以Write操作中的DBIDResp响应为代表来举例。

3. Observe响应和Order响应的区别

图1为WriteUnique的传输流程图。Completer在收到WriteUnique后,可以按任意顺序返回DBIDResp和Comp响应,这取决于Completer架构的设计。

图1 WriteUnique的传输流程图

根据Order响应的定义,这笔WriteUnique操作至少要到达Completer内部对当前requestor的保序点,Completer才可以返回DBIDResp响应,这里需要注意的是,按道理Completer确定WriteUnique到达某个对当前requestor的保序点就可以返回DBIDResp响应,不需要这笔WriteUnique到达Completer内部总的保序点。如下图2所示。

图2 允许返回DBIDResp的点

根据Observe响应的定义,这笔WriteUnique操作要等Completer操作把系统内其它requestor的数据都无效之后,Completer才会返回Comp响应。之所以需要都无效掉,举个例子,比如另一个Requestor1内部有同cache line的副本,那没有无效掉就返回Comp响应的话,Requestor1内部的读操作,读到的仍然是旧值,还无法observe到WriteUnique的新值。如下图3所示,只有执行了步骤2, 3,4之后,Completer才可以进行步骤5,不然就算Core0对0x80地址写了01,Core1还是没有observe到,因为Core1内部仍然在使用00数据。

图3 Comp响应返回时间点

根据Completer微架构的不同,同一笔request操作,返回Comp和DBIDResp响应的顺序是不固定的,谁先满足响应的条件,谁就可以先发送。另外,由于CHI总线通常采用Mesh或Ring结构,先发送的响应也不一定先到达Requestor。

4. DBIDResp响应举例

以Arm architecture定义的non-Reordering(nR)属性举个DBIDResp响应应用的具体例子。如果一个Core内部有两笔nR属性的store操作(storeA, storeB),它们访问的地址任意,但属于同一个peripheral device空间。那么Core需要如何发送通知CHI要做好这两笔store的保序呢?可以参考下图4和图5。

图4 WriteNoSnpA -> WriteNoSnpB -> WriteNoSnpC保序

图5 WriteNoSnpA和WriteNoSnpB不保序,WriteNoSnpB和WriteNoSnpC保序

Core在发送完第一笔StoreA的请求之后,需要等待下游返回DBIDResp响应后,再发送StoreB请求,这样下游就清楚StoreA和StoreB两者之间需要保序,否则,下游可能会乱序执行StoreA和StoreB,造成最终的结果与我们预期不一致。需要注意的是,如果Core收到StoreA的Comp响应,还没有收到DBIDResp响应,那么Core仍然不能发送StoreB,因为Comp响应是下游保证同address空间的保序。

Device属性的保序是按照Peripheral device空间来进行,所以在总线设计中,通常所有requestors的所有device请求都路由到同一个HN上去处理。而normal memory属性的地址空间通常可以按某些address位切割成很多份更小的空间,这些更小的空间有自己的HN,从而加速整个总线的并行处理能力。

5. 总结

综上所述,Observe响应和Order响应各有各的用法,两者之间功能有部分重叠,但又有部分完全含义不一致。Observe响应倾向于多个requestors在同范围内的保序,Order响应倾向于单个requestor在同范围内的保序。

大家对一致性协议原理和内存模型有疑问的话,可以读读这两篇文章。

一文读懂Memory consistency model (内存模型)

一文读懂Cache一致性原理

另外,感谢为本文提供思路的天才同事们提供的一些见解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java线程间同步----wait、notify、synchronized

一、wait、notify wait、notify 是java 根级父类Obeject 中定义得两个方法,其相关作用如下: object.wait():执行该语句,会让获取了该object对象锁得线程进入WAIT状态,并释放该object对象锁; object.notify…

同旺科技 USB TO SPI / I2C适配器读写24LC256--字节写

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版; 00地址写入一个字节数据AA,并读回验证; 单字节写时序: 读字节时序: …

OpenCV——透视变换

前言 ​ 需求: 将一个梯形变为需要的图形,后续需要持续进行映射。让整张图像的所有点位都按照这样的映射关系进行映射。 正文 一、透视变换相关介绍 从名称中可以清楚地看出,透视变换研究是坐标变化之间的关系。这种类型的转换不保留信息…

数据采集技术综合项目实战3(网络爬虫+数据预处理+数据可视化)附带详细步骤说明,干货满满

项目介绍及需求: 本项目主要是通过对b站电影弹幕进行采集并分析。1.获得弹幕高频词生成符合该电影特征、主题、角色等相关字段的词云图,通过词云图的方式对某部电影主题具体化。2.获取用户年内评论发布时间观生成时间的折线图,以便从侧面观察…

HarmonyOS-静态库(SDK)的创建和使用

文章目录 一、静态库(SDK)二、创建静态库1.新建静态库模块2. 开发静态库内容3. 编译静态库 三、使用静态库1. 配置项目依赖2. 在应用中使用静态库3. 注意事项 四、打包错误1. library引用本地har包错误 一、静态库(SDK) 在Harmon…

【35分钟掌握金融风控策略6】决策树风控策略开发

目录 ​编辑 决策树 决策树原理 决策树生成 特征选择 决策树生成 决策树剪枝 决策树 决策树(Decision Tree)是一种强大的分类和预测方法,因其实践起来比较简单且具有较好的解释性,所以在金融风控领域应用广泛。决策树也是…

如何快速提高阿里国际、Shopee和速卖通产品的曝光率?

当卖家完成产品上传后,他们还能做些什么来进一步提升产品的曝光量呢?产品的曝光量无疑对店铺的销量具有显著影响,那么,如何有效地提升产品曝光量呢?又有哪些快速且实用的方法呢?今天,我们就来深…

【力扣 Hot100 | 第五天】4.20(回文链表)

1.回文链表 1.1题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例一: 输入:head [1,2,2,1] 输出:true示例二: 输入…

智慧城市标准化白皮书(2022版)发布

2022年7月25日,国家智慧城市标准化总体组2022年度全体会议召开期间,《智慧城市标准化白皮书(2022版)》正式发布。 城市作为一个复杂巨系统,是多元主体融合及多元活动集聚的复杂综合体。城市的运行发展关联 到发展、治…

康耐视visionpro-Cog2DSymbolTool操作操作工具详细说明

Cog2 DSymbolToolI功能说明: 二维码读取工具 Cog2 DSymbolTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加Cog2DSymbolTool工具 ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入图像。 ③.代码系统&#x…

Pytest精通指南(22)钩子函数-重复执行(pytest-repeat)

文章目录 前言应用场景插件安装参数分析使用方式一:命令行使用方式二:配置文件使用方式三:装饰器 前言 pytest框架中的**重复测试(pytest-repeat)**插件的用途是允许在运行测试用例时进行多次循环,以更全面…

2024年开通最新版云开发cms步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

中毒的电脑插U盘也会中毒吗?U盘中毒了不显示数据怎么办

随着数字技术的快速发展,U盘作为数据存储和传输的重要工具,广泛应用于我们的日常生活和工作中。然而,U盘在带来便利的同时,也带来了潜在的安全风险。当一台中毒的电脑插入U盘时,U盘是否也会被感染?如果U盘中…

PHP 爬虫如何配置代理 IP(CURL 函数)

在 PHP中 配置代理IP&#xff0c;可以通过设置 CURL 库的选项来实现&#xff0c;代码如下&#xff1a; 当然你要有代理ip来源&#xff0c;比如我用的这个 代理商 &#xff0c;如果想服务稳定不建议找开源代理池&#xff0c;避免被劫持。 <?php // 初始化cURL会话 $ch cu…

C++中的stack(容器适配器)

目录 一、成员函数 一、构造函数 二、入栈 三、出栈 四、判空 empty () 五、栈大小 size 六、取栈顶元素 top 七、入栈 emplace 八、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 C中的stack不再是容器&#xff0c;而是容器适配器 注意&a…

[InternLM训练营第二期笔记]4. XTuner 微调 LLM:1.8B、多模态、Agent

该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。 该笔记是第四节课&#xff0c;学习大语言模型微调的基本概念&#xff0c;以及利用XTuner工具进行微调。 0. 什么是LLM中的微调 0.1 两种Finetune范式 微调的目的是为了让foundation模型在特定的领域更好地发挥…

力扣练习题(2024/4/18)

1不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff08;非水平线…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计&#xff0c;如下&#xff1a; select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…

【人工智能基础】状态空间搜索

状态空间法 状态空间&#xff1a;一个问题全部可能的状态以及其关系的集合。 状态空间图&#xff1a;以图的形式表示问题的状态空间&#xff0c;节点对应状态&#xff0c;边对应状态转移算子&#xff0c;边上的权对应转移所需的代价 问题的解&#xff1a;是从最开始状态到目…

BP使用和弱口令漏洞

目录 一、BP使用 1.BP设置 2.Proxy 3.Reapter 4.Decord 5.Intruder 二、弱口令爆破 1.服务弱口令爆破 2.验证码绕过 一、BP使用 1.BP设置 设置代理的监听端口: 这里设置为本机的9090端口 2.Proxy 浏览器要挂代理&#xff0c;设置为本机的9090端口 打开拦截功能 当浏览…