【Booksim】Booksim2.0模拟器集成新拓扑

  • Incorporating a new topology in Booksim
    • 1. 新拓扑结构
    • 2. 需要添加的文件
    • 3. 修改步骤
      • 3.1 添加testnet.hpp
      • 3.2 添加testnet.cpp
      • 3.3 将testnet集成到network.cpp中
      • 3.4 创建配置文件testnetconfig
      • 3.5 在main.cpp和global.hpp中加入gP_testnet和gA_testnet变量
      • 3.6 make进行编译
    • 4. 仿真模拟结果

Incorporating a new topology in Booksim

1. 新拓扑结构

在这里插入图片描述

如图1所示,拟集成一种上述的拓扑。

2. 需要添加的文件

Booksim中集成新的拓扑,我们需要添加如下文件:

  • 拓扑文件
    • testnet.cpp
    • testnet.cpp
  • 配置文件
    • Testnetconfig
  • 修改文件
    • network.cpp

3. 修改步骤

3.1 添加testnet.hpp

 #ifndef _TestNet_HPP_#define _TestNet_HPP_#include "network.hpp"#include "routefunc.hpp"class TestNet : public Network {public:TestNet( const Configuration &config, const string & name );static void RegisterRoutingFunctions() ;private:int _a;// 路由器总数int _p;// 每个路由器管理的处理节点int _k;// 每个路由器的端口数void _ComputeSize( const Configuration &config );// 计算拓扑大小void _BuildNet( const Configuration& config );// 构建网络};int testnet_port(int rID, int src, int dest);//// Routing Functions//void min_testnet( const Router *r, const Flit *f, int in_channel, OutputSet *outputs, bool inject ) ;#endif

3.2 添加testnet.cpp

  1. 构造函数
TestNet::TestNet( const Configuration& config, const string & name ) 
: Network(config, name) 
{
cout<< "testnet constructor starts..."<<endl;
_ComputeSize(config);
_Alloc();
_BuildNet(config);
cout<< "testnet constructor ends..."<<endl;}
  1. _ComputeSize()
void TestNet::_ComputeSize( const Configuration &config ) {cout<< "_ComputeSize starts..."<<endl;// _a _p _k 均为硬编码,但可以使用GetInt()从配置文件中获取
_a = 4;// 路由器总数
_p = 3;// 每个路由器管理的处理节点_k = (_a-1) + _p;// 每个路由器的端口数// 以下三个参数为network中需要使用的
_nodes    = _a * _p; // Number of nodes in network 总节点数(除却路由器)
_size     = _a + _a * _p;      // Number of routers in network 包括路由器和处理节点
_channels = _a * (_a-1);     // 路由器之间的uni-directional link,不包括处理节点// 全局变量,路由函数需要
gP_testnet = _p;
gA_testnet = _a;cout<< "_ComputeSize ends..."<<endl;
}
  1. _Alloc()
    _Alloc()定义在network.cpp,用于分配注入弹出通道和路由器link

  2. _BuildNet()
    _BuildNet()初始化路由器,添加所有的通道。如下图所示:
    在这里插入图片描述

void TestNet::_BuildNet( const Configuration& config ) {
// for every router // build the router object// add the links to the processing nodes// add the links to the other routersostringstream router_name;
int node;
int c, cnt;
int port_to_routers = _a - 1;for (node = 0; node < _a; ++node) {// create routerrouter_name<< "router";router_name<< "_"<< node;// k是输入输出端口数_routers[node] = Router::NewRouter(config, this, router_name.str(), node, _k, _k);_timed_modules.push_back(_routers[node]);router_name.str("");// add input and output channels to processing nodesfor(cnt = 0; cnt < _p; cnt++){c = _p * node + cnt; // for router 0, c is 0,1,2; router 1, c is 3,4,5 and so on._routers[node]->AddInputChannel(_inject[c], _inject_cred[c]);}for(cnt = 0; cnt < _p; cnt++){c = _p * node + cnt; // for router 0, c is 0,1,2; router 1, c is 3,4,5 and so on._routers[node]->AddOutputChannel(_eject[c], _eject_cred[c]);}// add output and input channels to other routers// add output channelsfor(cnt = 0; cnt < _a - 1; cnt++){c = port_to_routers * node + cnt; // for router 0, c is 0,1,2; router 1, c is 3,4,5 and so on._routers[node]->AddOutputChannel(_chan[c], _chan_cred[c]);}// add input channelsfor(cnt = 0; cnt < _a; cnt++){if(cnt == node){continue;// do nothing}else if(cnt < node){c = cnt * port_to_routers - 1 + node;}else if(cnt > node){c = cnt * port_to_routers + node;}_routers[node]->AddInputChannel(_chan[c], _chan_cred[c]);}
}
}
  1. RegisterRoutingFunctions()
    该函数注册拓扑的路由算法,而gRoutingFunctionMap定义在routefunc.cpp
void TestNet::RegisterRoutingFunctions() {gRoutingFunctionMap["min_testnet"] = &min_testnet;
}

对于一组特定的router, flit和input channel, 需要提供一个output port和output VC用于路由。
6. testnet_port(int rID, int src, int dest)选择正确的输出端口

int testnet_port(int rID, int src, int dest)// find the right port
{int dst_router;int out_port;dst_router = dest / gP_testnet;if(rID == dst_router)// 目标node是在当前路由器管理之下{out_port = dest % gP_testnet;}else// 如果是在其他router下管理{if(dst_router < rID){out_port = gP_testnet + dst_router;}else{out_port = gP_testnet + dst_router - 1;}}return out_port;
}
  1. min_testnet()进行路由
void min_testnet( const Router *r, const Flit *f, int in_channel, OutputSet *outputs, bool inject )
{int debug = f->watch;outputs->Clear();if(inject){int inject_vc = RandomInt(gNumVCs-1);outputs->AddRange(-1, inject_vc, inject_vc);return;}int rID = r->GetID();int out_port = -1;int out_vc = 0;if(in_channel < gP_testnet)// source node assign to vc0{out_vc = 0;}else// dest node assign it to vc1{out_vc = 1;}out_port = testnet_port(rID, f->src, f->dest);outputs->AddRange(out_port, out_vc, out_vc);if(debug){*gWatchOut << GetSimTime()<<" | "<<r->FullName()<<" | "<<" through output port : "<< out_port<<" out vc: "<< out_vc << endl;}
}

3.3 将testnet集成到network.cpp中

- 添加testnet.hpp

在这里插入图片描述

- 加入testnet拓扑

在这里插入图片描述

3.4 创建配置文件testnetconfig

```
// Topology
topology = testnet;//a = 4;
//p = 3;//Routing
routing_function = min;// Flow control
num_vcs = 2;// Traffic
traffic = uniform;
injection_rate = 0.25;
```

3.5 在main.cpp和global.hpp中加入gP_testnet和gA_testnet变量

3.6 make进行编译

4. 仿真模拟结果

  • a = 4, p = 3时运行booksim得到如下结果:
====== Overall Traffic Statistics ======
====== Traffic class 0 ======
Packet latency average = 14.392 (1 samples)minimum = 7 (1 samples)maximum = 78 (1 samples)
Network latency average = 14.3911 (1 samples)minimum = 7 (1 samples)maximum = 78 (1 samples)
Flit latency average = 14.4049 (1 samples)minimum = 7 (1 samples)maximum = 78 (1 samples)
Fragmentation average = 0 (1 samples)minimum = 0 (1 samples)maximum = 0 (1 samples)
Injected packet rate average = 0.250979 (1 samples)minimum = 0.24025 (1 samples)maximum = 0.26 (1 samples)
Accepted packet rate average = 0.251208 (1 samples)minimum = 0.23125 (1 samples)maximum = 0.27025 (1 samples)
Injected flit rate average = 0.250979 (1 samples)minimum = 0.24025 (1 samples)maximum = 0.26 (1 samples)
Accepted flit rate average = 0.251208 (1 samples)minimum = 0.23125 (1 samples)maximum = 0.27025 (1 samples)
Injected packet size average = 1 (1 samples)
Accepted packet size average = 1 (1 samples)
Hops average = 1.74948 (1 samples)
Total run time 0.0592558
  • a = 8, p = 4时运行booksim得到如下结果:
====== Overall Traffic Statistics ======
====== Traffic class 0 ======
Packet latency average = 14.1645 (1 samples)minimum = 7 (1 samples)maximum = 40 (1 samples)
Network latency average = 14.1645 (1 samples)minimum = 7 (1 samples)maximum = 40 (1 samples)
Flit latency average = 14.1681 (1 samples)minimum = 7 (1 samples)maximum = 40 (1 samples)
Fragmentation average = 0 (1 samples)minimum = 0 (1 samples)maximum = 0 (1 samples)
Injected packet rate average = 0.248344 (1 samples)minimum = 0.236 (1 samples)maximum = 0.261667 (1 samples)
Accepted packet rate average = 0.248417 (1 samples)minimum = 0.223667 (1 samples)maximum = 0.273667 (1 samples)
Injected flit rate average = 0.248344 (1 samples)minimum = 0.236 (1 samples)maximum = 0.261667 (1 samples)
Accepted flit rate average = 0.248417 (1 samples)minimum = 0.223667 (1 samples)maximum = 0.273667 (1 samples)
Injected packet size average = 1 (1 samples)
Accepted packet size average = 1 (1 samples)
Hops average = 1.87333 (1 samples)
Total run time 0.14817

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚小标-智能AI商标注册交易平台【24小时您口袋里的商标管家】

随着全球经济一体化进程的推进和科技的飞速发展&#xff0c;知识产权已经成为企业高质量发展的重要竞争关键因素&#xff0c;众多企业发展的核心竞争力。通过加强知识产权保护&#xff0c;企业可以更好地保护自身品牌形象和市场份额&#xff0c;从而提高国内外市场竞争力&#…

C语言洛谷题目分享(9)奇怪的电梯

目录 1.前言 2.题目&#xff1a;奇怪的电梯 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.说明 6.题解 3.小结 1.前言 哈喽大家好啊&#xff0c;前一段时间小编去备战蓝桥杯所以博客的更新就暂停了几天&#xff0c;今天继续为大家带来题解分享&#xff0c;希望大…

通用设计的四大原则,大厂设计师带案例讲解!

作为数字产品设计师&#xff0c;在进行产品设计时要考虑产品的各种因素&#xff0c;例如功能、美观、安全等&#xff0c;要尽可能地满足所有用户的需求&#xff0c;做出对所有用户都尽可能公平的解决方案。但是&#xff0c;对于新手来说&#xff0c;在实际进行产品设计时&#…

HUD抬头显示器中如何设计LCD的阳光倒灌实验

关键词&#xff1a;阳光倒灌实验、HUD光照温升测试、LCD光照温升测试、太阳光模拟器 HUD&#xff08;Head-Up Display&#xff0c;即抬头显示器&#xff09;是一种将信息直接投影到驾驶员视线中的技术&#xff0c;通常用于飞机、汽车等驾驶舱内。HUD系统中的LCD&#xff08;Liq…

RabbbitMQ基本使用及其五种工作模型

初识MQ 同步通讯和异步通讯 什么是同步通讯呢&#xff1f;举个例子&#xff0c;你认识了一个小姐姐&#xff0c;聊的很火热&#xff0c;于是你们慢慢开始打电话&#xff0c;视频聊天&#xff0c;这种方式就成为同步通讯&#xff0c;那什么是一部通讯呢&#xff0c;同样的&…

Ant Design 表单基础用法综合示例

Ant Design 的表单组件设计得非常出色,极大地简化了表单开发的复杂度,让开发者能够快速构建出功能丰富、交互友好的表单界面。 接下来总结一下 Ant Design 中表单的基本用法。 Form 组件 用于定义整个表单,可以设置表单的布局方式、提交行为等。通常会将表单字段组件嵌套在 F…

利用栈删除数组中重复元素

先将数据排序&#xff08;降序或升序&#xff09; 建立一个“栈”&#xff0c;三种情况&#xff1a; 1.栈为空&#xff1a;压入一个元素 2.栈不为空 且 栈顶元素不等于将入栈元素&#xff1a;压入一个元素 3.栈不为空 且 栈顶元素等于将入栈元素&#xff1a;删除将压入元素…

【学习笔记十一】EWM上架目标仓位确定过程及配置

一、EWM确定目标区域概述 1.EWM从仓库处理类型获取源仓库类型&#xff08;Source storage type&#xff09;和源仓位&#xff08;Source Bin&#xff09;2.EWM根据仓库类型&#xff08;storage type&#xff09;、仓库分区&#xff08;storage section&#xff09;和上架策略&a…

Matlab|基于广义Benders分解法的综合能源系统优化规划

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…

Python开源工具库使用之词云Wordcloud

文章目录 前言一、基本使用1.1 文本生成词云1.2 配置项 二、进阶用法2.1 自定义形状2.2 自定义着色2.3 自定义词频2.4 中文 三、实际案例3.1 工作报告词云3.2 周杰伦歌词词云 四、总结4.1 优点和局限性4.2 展望未来发展 参考 前言 当我们需要将大量文本数据可视化展示时&#…

单链表和文件操作使用练习:通讯录

1. 项目文件组成&#xff08;vs2022&#xff09; 1. Contact.h和Contact.c分别为实现通讯录的头文件和源文件。 2. SList.h和SList.c分别为实现单链表的头文件和源文件。 3. test.c为测试用的源文件&#xff0c;用于调用通讯录提供的函数。 4. Contact.txt用于存储联系人信息。…

【热门话题】PyTorch:深度学习领域的强大工具

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 PyTorch&#xff1a;深度学习领域的强大工具一、PyTorch概述二、PyTorch核心特性…

【华为OD机试】围棋的气【C卷|100分】

题目描述 围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点, 对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中, 有几个交叉点没有棋子,由此可…

RabbitMQ消息模型之Direct消息模型

Direct消息模型 * 路由模型&#xff1a; * 一个交换机可以绑定多个队列 * 生产者给交换机发送消息时&#xff0c;需要指定消息的路由键 * 消费者绑定队列到交换机时&#xff0c;需要指定所需要消费的信息的路由键 * 交换机会根据消息的路由键将消息转发到对应的队…

解锁创意无限,体验全新Adobe Illustrator 2021 for mac/Win中文版

在数字化创意的浪潮中&#xff0c;Adobe Illustrator 2021中文版无疑是设计师们的得力助手。这款软件集高效、便捷、创新于一体&#xff0c;无论是Mac还是Windows用户&#xff0c;都能在其中找到属于自己的创意空间。 Adobe Illustrator 2021中文版延续了其强大的矢量图形处理…

循环双链表的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#…

FFmpeg: 自实现ijkplayer播放器--04消息队列设计

文章目录 播放器状态转换图播放器状态对应的消息&#xff1a; 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列&#xff0c;用于发送&#xff0c;设置播放…

[lesson33]C++中的字符串类

C中的字符串类 历史遗留问题 C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型&#xff0c;因此无法获得字符串类型 解决方案 从C到C的进化过程引入自定义类型在C中可以通过类完成字符串类型的定义 标准库中的字符串类 C语言直…

学鸿蒙开发的优劣势,你清楚吗?建议你了解一下!

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习鸿蒙开…

Android使用shape属性绘制边框内渐变色

目录 先上效果图实现方法shape属性介绍代码结果 先上效果图 这是使用AndroidStudio绘制的带有渐变色的边框背景色 实现方法 项目中由于UI设计需求&#xff0c;需要给按钮、控件设置带有背景色效果的。以下是UI效果图。 这里我们使用shape属性来绘制背景效果。 shape属性介…