Rocket - debug - DebugCustomXbar再讨论
https://mp.weixin.qq.com/s/YPFa6kE6I_Ud_MJGvzmS-g
简单讨论输入边/输出边Bundle的方向。
1. 上游节点的地址不重复
仔细看了一下sourceFn的实现:
其中要求上游节点中不存在重复的地址:
这样也就不存在decoded中存在两个元素同时为真的情况:
2. source.addr := sink.addr
在lazy module的实现中,把sink.addr输入到source.addr中:
而在DebugCustomBundle的定义中,addr的方向是Input:
也就是说DebugCustomXbar节点的输入边对应的DebugCustomBundle的方向被反转了,而输出边对应的DebugCustomBundle的方向没有被反转。就是下图的情况:
输入边对应的Bundle的方向在哪里被反转的呢?
3. 一个例子:TLBundle & TLBundleA
TLBundleA中没有定义方向:
TLBundle中使用Decoupled来定义方向:
Decoupled->DecoupledIO->ReadyValidIO的方向使用的是Producer的视角:
一般情况下,一个TileLink节点N包含两个TLBundleA:分别与输入边和输出边对应。
与输出边对应的TLBundleA连接下游节点,节点N的角色是Producer,所以TLBundleA不需要反转方向。
与输入边对应的TLBundleA连接上游节点,节点N的角色是Consumer,所以TLBundleA需要反转方向。
也就是说,输入边对应的Bundle应该反转方向。
4. 在哪里反转方向?
跟踪LazyModule的使用和初始化代码,确定在哪里反转的。
因为流程较长,放在其他文件中了,下面以参考链接的形式列出。
A. Level 0
参考链接:https://docs.qq.com/pdf/DUW56RWp6SUFJS3Ru
B. new DebugCustomXbar(outputRequiresInput = false)
参考链接:https://docs.qq.com/pdf/DUWxpdmR3aVpuVlFx
C. 引用xbar.module
参考链接:https://docs.qq.com/pdf/DUUVHbEpwUkt3Y1Rx
5. 总结
a. 输入边对应的Bundle的方向会被反转;
b. 反转的位置在LazyModuleImpLike.instantiate()中调用的AutoBundle.makeElements中:
Rocket - debug - DebugCustomXbar再讨论的更多相关文章
- Rocket - debug - DebugCustomXbar
https://mp.weixin.qq.com/s/7h9Bdb0x4_clyigMU_0B7Q 讨论DebugCustomXbar中的几个问题. 1. sources/sourceParams n ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- getch()和getchar()之再讨论
原文:getch()和getchar()之再讨论 在C语言的字符处理函数中,getch()和getchar()是经常让人迷惑的两个函数,他们都有一些“奇怪的”特点让初学者摸不着头脑.两个函数有很多相似 ...
- 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 数据库连接不释放测试 连接池 释放连接 关闭连接 有关 redis-py 连接池会导致服务器产生大量 CLOSE_WAIT 的再讨论以及一个解决方案
import pymysqlfrom redis import Redisimport time h, pt, u, p, db = '192.168.2.210', 3306, 'root', 'n ...
- Rocket - debug - Periphery
https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInnerAsync
https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w 简单介绍TLDebugModuleInnerAsync的实现. 1. dmInner dmInner ...
随机推荐
- 【漫画】JAVA并发编程三大Bug源头(可见性、原子性、有序性)
原创声明:本文转载自公众号[胖滚猪学编程] 某日,胖滚猪写的代码导致了一个生产bug,奋战到凌晨三点依旧没有解决问题.胖滚熊一看,只用了一个volatile就解决了.并告知胖滚猪,这是并发编程导致的 ...
- 线段树 区间加 gcd 差分 小阳的贝壳
小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了. 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y) 这个可以推到 n 个 ...
- Spring Cloud学习 之 Spring Cloud Hystrix(使用详解)
文章目录 创建请求命令: 定义服务降级: 异常处理: 异常传播: 异常获取: 命令名称,分组以及线程池划分: 创建请求命令: Hystrix命令就是我们之前说的HystrixCommand,它用来 ...
- Synchronized加锁、锁升级和java对象内存结构
首先了解一下JMM中定义的内存操作: 一个线程操作数据时候都是从主内存(堆内存)读取到自己工作内存(线程私有的数据区域)中再进行操作.对于硬件内存来说,并没有工作内存和主内存的区分,这都是java内存 ...
- python是如何进行参数传递的?
在分析python的参数传递是如何进行的之前,我们需要先来了解一下,python变量和赋值的基本原理,这样有助于我们更好的理解参数传递. python变量以及赋值 数值 从几行代码开始 In [1]: ...
- 浅谈字典树Trie
\(\;\) 本文是作者学习<算法竞赛进阶指南>的所得,有些语言是摘自其中. \(\;\) 基础知识 定义 \(\;\) 字典树(Trie):是一种支持字符串查询的多叉树结构.其中的每个节 ...
- HDU 2010 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2010 题目大意:给你段连续的数,把满足条件(数字 每一位的3 == 该数字)的数输出,就是水仙花数 解 ...
- Hadoop 集群搭建和维护文档
一.前言 -- 基础环境准备 节点名称 IP NN DN JNN ZKFC ZK RM NM Master Worker master1 192.168.8.106 * * * * * * maste ...
- 【图机器学习】cs224w Lecture 8 & 9 - 图神经网络 及 深度生成模型
目录 Graph Neural Network Graph Convolutional Network GraphSAGE Graph Attention Network Tips Deep Gene ...
- Arthas 使用(二) —— 应用场景
1. ognl获取bean SpringContextUtil,通常代码中会有类似这样的工具类用来获取 bean 实例 @Component public class SpringContextUti ...