https://mp.weixin.qq.com/s/XDUtw0uPrVXC4CChbydF_A

 
分析在透传和代理两种模式下,AtomicAutomata可能出现的问题。
 
 
1. 透传
 
如果下游节点支持某一个Atomic操作,并且AtomicAutomata节点被允许不做代理的话,可以由下游节点处理这个Atomic操作:
 
因为透传的请求不会被缓存到CAM中,而CAM中已缓存的请求具有更高的优先级,所以当透传的 请求发送到out.a时,CAM实际上是空的。
 
 
当这个Atomic请求的响应返回到out.d时,如果CAM仍然是空的,或者没有其他同source的请求缓存在CAM中时,d_cam_sel_match和d_cam_sel是全0:
 
d_drop为假,进而out.d被透传到in.d:
 
问题来了:CAM中是否会存在同source的Atomic请求呢?
 
2. 部分透传、部分代理
 
答案是会:这意味着针对某个manager部分Atomic请求由他自己处理,部分请求由AtomicAutomata代理。符合传递给上游节点的参数范围:
假设beatBytes = 8,m.supportsArithmetic = [4, 16],
那么告诉上游节点的支持范围是widen之后的,即[1, 16]。其中[1, 2]由AtomicAutomata代理,[4, 16]透传给下游节点自行处理。
 
如果在透传了一个大小为8字节的透传请求后,又紧接着来了一个2字节的代理请求呢?
 
规范中似乎没有禁止这种请求顺序:
a. 可不等响应而连发多个请求,响应也不必按照请求的顺序发送:
 
b. 可以连发两个同类型的请求,而不必等待回复:
 
3. 问题情况
 
如果透传了一个Atomic请求,而没有回复的情况下,又来了一个同source的Atomic请求被缓存入CAM中。
 
那么当第一个透传请求的回复AccessAckData到来时,会把第二个请求的缓存条目(CAM entry)当做自己的条目对待:
​进而数据被缓存到cam_d中参与AMO运算。
 
第二个请求的响应到来时,如果代理操作的Put/Ack已完成,会被透传返回。如果早于Put/Ack到来,那么会被存入cam_d。
 
4. burst的情况
 
如果第一个被透传的是一个burst请求,情况比较复杂。需要注意的是后续beat时d_first为假,导致d_drop为假。这里不做分析了。
 
5. 发生概率
 
很少有节点只支持大范围的Atomic操作,而不支持小范围的Atomic操作。
如果连发两个相同类型的消息,那么响应消息就难以确认是针对的哪一个请求。
 
所以上述情况存在的可能性很低。
 
6. 解决办法
 
比较简单的办法是:把widen取消掉,只支持ourSupport大小的Atomic请求。
 
如果下游节点只支持大范围的Atomic操作,那么他就不能发挥这个能力,而只能选择被代理了。
 

Rocket - tilelink - AtomicAutomata之二的更多相关文章

  1. Rocket - tilelink - AtomicAutomata

    https://mp.weixin.qq.com/s/O7VTHqpCFNJQi3EpucXkIw   简单介绍AtomicAutomata的实现.(细节问题太多,恕不完全表述.)   ​​   1. ...

  2. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  3. Rocket - tilelink - ErrorEvaluator

    https://mp.weixin.qq.com/s/NkbW465NAmhDsETksd2M0g   介绍ErrorEvaluator的实现.   ​​   1. 基本介绍   ErrorEvalu ...

  4. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  5. Rocket - tilelink - TLArbiter

    https://mp.weixin.qq.com/s/0ob-Fq-ZOoj-_S7pTJu6rQ   介绍TLArbiter的实现,主要关注如何实现burst的多个beat的输出.   ​​   1 ...

  6. Rocket - tilelink - fastProperty

    https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大)   ...

  7. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  8. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  9. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

随机推荐

  1. Python 文件的读取与写入

    1. 读取文件,文件中没有中文 备注 : 文件名 : EnglishFile.txt 文件位置 : 保存在所写的.py文件的同级目录,附上截图,便于参考 备注 : 文件位置可以改变,只需要把文件路径传 ...

  2. 装完B就跑,这几个Linux指令真的Diǎo

    本文介绍一些有趣的指令,实用或者可以装逼,不妨自己也来试试看: 文章目录 1 故事的开局 2 杰哥的表演 2.1 sl 2.2 htop 2.3 gcp 2.4 hollywood 2.5 cmatr ...

  3. Excel心得

    智能表.数据透视表.分类汇总表是Excel最值得学的技能. 通过插入表,或者快捷键Ctrl+T/Ctrl+L,可以将区域转换为智能表,保证了字段的公式的统一,而且版式自动化处理,一深一浅.Ctrl+Q ...

  4. 1020 Tree Traversals (25分)思路分析 + 满分代码

    题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...

  5. Java面试札记

    Java面试札记  在最深的夜里,即使是你的影子也会离你而去. 背景:愿某人在中秋节之前吃上大厂月饼!!!@CDZ 1.Java的八种基本数据类型? 整型:byte.int.short.long: 浮 ...

  6. PAT数列排序

    19考研结束了 .. 还有11天PAT甲 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T52 题目大意:训练排序 解题思路: 方法一: 直接用C++里的so ...

  7. spark机器学习从0到1奇异值分解-SVD (七)

      降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中,用于消除噪声 ...

  8. 02.drf不使用serializers返回数据

    drf 可以使用不经过model和serialzier的数据返回,也可以配置权限 class DashboardStatusViewset(viewsets.ViewSet): "" ...

  9. FTP上传 -首先上传文件到的那台电脑得安装ftp

    /*↓↓↓↓ add upload ftp file 2014-03-16*/        /*↓↓↓↓ add 2014-03-16 ftp upload file*/    var $ftpse ...

  10. Java常用设计模式详解1--单例模式

    单例模式:指一个类有且仅有一个实例 由于单例模式只允许有一个实例,所以单例类就不可通过new来创建,而所有对象都默认有一个无参的构造函数可以创建对象,所以单例类不仅不能提供public的构造方法,还需 ...