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. jQuery中bind()与on()绑定事件的区别

    .on()方法比.bind()方法多一个参数selector .on()的selector参数是筛选出调用.on()方法的dom元素的指定子元素,如: $("ul").on('cl ...

  2. 基于BasicRF点对点无线开发基础知识

    BasicRF点对点概述 BasicRF软件包有四大部分: <1> 硬件层:Hardware Layer. <2> 硬件抽象层:Haware Abstraction Layer ...

  3. 步入LTE、多址技术

    LTE系统的主要性能和目标 与3G相比,LTE主要性能特性: 带宽灵活配置:支持1.4MHz, 3MHz, 5MHz, 10Mhz, 15Mhz, 20MHz 峰值速率(20MHz带宽):下行100M ...

  4. FOC 转子初始位置检测(图文详解)

    本文介绍了PMSM的转子初始位置的各种情况: 文章目录 1 什么是转子的初始位置? 2 如何让转子运行到初始位置? 3 iq=IDC;id=0;θ=0i_{q}=I_{DC} ;i_{d}=0;\th ...

  5. [hdu5392 Infoplane in Tina Town]置换的最小循环长度,最小公倍数取模,输入挂

    题意:给一个置换,求最小循环长度对p取模的结果 思路:一个置换可以写成若干循环的乘积,最小循环长度为每个循环长度的最小公倍数.求最小公倍数对p取模的结果可以对每个数因式分解,将最小公倍数表示成质数幂的 ...

  6. python 一个模块找不到的错误:ModuleNotFoundError

    阿刁是一个自动化测试用例,从一出生他就被赋予终生使命,去测试一个叫登录的过程是否合理.他一直就被关在一个小黑屋里面,从来也没有出去过,小黑屋里还被关着其他的同胞,他们身上都捆着两个小袋子. 小黑屋里很 ...

  7. [linux] VNC the connection was refused by the computer

    在用VNC 连接host的时候发现“”“the connection was refused by the computer ” 方法:发现登录这个host,敲打:verser 的时候出现了这个: 它 ...

  8. 2018-07-01 jq效果

    jq效果的实现方法: 1.基本 show(time) -> 显示:相当于display:block hide(time) -> 隐藏:相当于display:none toggle(time ...

  9. Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

    一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...

  10. ClickHouse基本操作(二)

    一.先来说一下,ClickHouse为啥快 MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快: ClickHouse不支持事务,不存在 ...