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. bootstrap4中bootstrap_treeview不显示图标原因以及解决办法

    1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...

  2. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  3. CF-612D The Union of k-Segments 差分

    D. The Union of k-Segments 题意 给出n个线段,以及一个数字k,让求出有哪些线段:线段上所有的点至少被覆盖了k次. 思路 假如忽略掉线段的左右端点范围,肯定是使用差分来维护每 ...

  4. 【转载】文件上传那些事儿,文件ajax无刷上传

    导语 正好新人导师让我看看能否把产品目前使用的FileUploader从老的组件库分离出来的,自己也查阅了相关的各种资料,对文件上传的这些事有了更进一步的了解.把这些知识点总结一下,供自己日后回顾,也 ...

  5. SpringBoot 整合Mail发送功能问题与解决

    SpringBootLean 是对springboot学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.oschina.n ...

  6. android学习流程确立

    也是摘抄自网上,先打个基础吧,以后有更新,再更改. 确定学习路线:向着中级工程师奋斗Android入门的时候,需要有一本入门书,好好学习书中的内容,同时花一年时间把Android官方文档中的train ...

  7. GitHub 热点速览 Vol.20:VSCode 插件全家桶新增画图小能手

    作者:HelloGitHub-小鱼干 摘要:后浪,这个五月热词用来概括 GitHub 本周热点无疑是最佳词汇.Deno 这个 Node.js 作者制造出来的后浪,掀起了 GitHub Trending ...

  8. ql的python学习之路-day4

    集合(set) 集合主要有两种用处: 1.去除相同的元素 2.关系测试,两个列表中的元素的关系 按照‘alex’讲的自己写了源码笔记,下面就直接贴出来: #!/usr/bin/env python # ...

  9. 很好的awk教程

    讲的内容配合分析web log ,疗效很好! http://www.ibm.com/developerworks/cn/linux/l-cn-awk-httplog/ 出差归来,哈哈,吐槽的不必写了, ...

  10. JS的函数和对象三

    复习 判断是否含有某个属性 对象.属性名 === undefined 对象.hasOwnProperty('属性名') '属性名' in 对象 方法  { say:function(){  this ...