简单介绍ProbePicker的实现。
 
 
1. 基本介绍
 
用于把多个Cache client合并成一个:
 
2. diplomacy node
 
ProbePicker的diplomacy node是一个适配器节点,用于与上下游节点连接,并进行参数传递。
 
这里下游节点的参数向上游节点传递时不做改变;上游节点的参数向下游节点传递时进行了适配,把可以合并处理的cache client的参数进行了合并,这样下游节点看到的ProbePicker的client参数中就少了一部分被合并掉的client。
 
1) clientFn
 
把原clients中的元素从右向左逐个进行combine,合并后的结果作为新的clients参数:
 
2) combine
 
这里的假设是连续的client访问的地址集合(visibility)是有序的:
a. 若head和next有重叠,则不能合并;head的意思是能够合并的元素的头一个,既然不能合并,那么head就失去了其意义,将其加入到output即最终的clients序列中,而下一个元素成为接下来要检查的能够合并的元素的头一个元素,即下一次combine中的head。
b. redact用于把head和next的sourceId/nodePath和visibility忽略掉进行比较,要求其他的域如name/requireFifo/supportsXXX等都需要相同;
c. 合并则是将head和next两个的sourceId和visibility进行合并;
 
3) 合并sourceId
 
head和next的sourceId具有怎么样的关系?
a. 重合:部分重合或者全部重合;
b. 不重合;
 
3. lazy module
 
lazy module用于实现ProbePicker的内部逻辑:
 
因为diplomacy node中可能把上游节点的多个clients合并到一起了,所以下游节点看到的sourceId实际上也是合并之后的,即下游节点发起Probe消息时,使用的是合并之后的source值。需要ProbePicker把这个source值区分成合并前的某一个client再转发给上游节点。
 
1) 成对的输入边和输出边
 
 
2) 默认直连
 
 
3) 区分source
 
a. edgeIn.client.clients.size是输入边的clients的数量,即ProbePicker看到的上游节点的clients的数量;edgeOut.client.clients.size是输出边的clients的数量,即ProbePicker的下游节点看到的ProbePicker的clients的数量。两者相等,表明没有进行合并;两者不等,则表明进行了合并,则需要对source域进行区分;
 
b. 判断source属于哪一个client:edgeOut.client.clients.map(_.sourceId contains out.b.bits.source)
 
c. 如果合并前只有一个client的sourceId被合并后的client包含,则表明这个client没有与其他client进行合并,所以无需区分;
 
d. 否则需要根据地址确定是属于哪一个合并前的client(这些client的visibility不重叠),而后转换为对应client的sourceId:
 

Rocket - tilelink - ProbePicker的更多相关文章

  1. Rocket - tilelink - RegisterRouter

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

  2. Rocket - tilelink - Nodes

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

  3. Rocket - tilelink - AsyncCrossing

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

  4. Rocket - tilelink - mask

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

  5. Rocket - tilelink - Parameters

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

  6. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  7. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

  8. Rocket - tilelink - BusWrapper

    https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂 ...

  9. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

随机推荐

  1. E. Height All the Same

    E. Height All the Same 题目大意: 给你一个n*m 的矩阵,让你在里面填数字代表这个位置的高度,数字的范围是[L,R],有两种操作,第一种就是给一位置的高度加2,第二种就是给两个 ...

  2. CTR预估模型演变及学习笔记

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...

  3. Vue + Element-ui实现后台管理系统(3)---面包屑 + Tag标签切换功能

    面包屑 + Tag标签切换功能 有关后台管理系统之前写过两遍博客,看这篇之前最好先看下这两篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system 1.V ...

  4. linux wc 的用法-linux 下统计行数、单词数、字符个数

    linux wc 的用法-linux 下统计行数.单词数.字符个数   wc : wc -l 统计有多少行 wc -w 统计有多少个单词 wc -c 统计有多少个字符

  5. Spring-mvc 配置文件applicationContext.xml

    相关jar包(4.3.16.RELEASE) <!-- Spring mvc 基础jar包,maven 依赖 --> <dependency> <groupId>o ...

  6. .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger

    .Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...

  7. 推荐一款Python神器,5 行 Python 代码 实现一键批量扣图

    今天给大家分享一款Python装逼实用神器. 在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去.专业点的人可以使用 PhotoShop 的"魔棒" ...

  8. Kali Linux 2020.1安装以及安装后要做的事

    Kali Linux是基于Debian的Linux发行版,预装了许多渗透测试软件,让大家从各种繁琐的软件安装中解脱出来,专注于测试本身. 本文章介绍了如何安装目前最新的2020.1版本,以及安装好后补 ...

  9. Git基本操作命令合集

    平时自己敲敲代码,使用Git命令也渐渐多了起来.使用起来的确很方便,今天来分享下Git基本概念和本地代码提交到github上的过程,很简单的,多操作几次就会了. Git定义 Git 是一个开源的分布式 ...

  10. SVM——支持向量机(完整)

    最基本的SVM(Support Vector Machine)旨在使用一个超平面,分离线性可分的二类样本,其中正反两类分别在超平面的一侧.SVM算法则是要找出一个最优的超平面. 线性可分SVM 优化函 ...