GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain

简介

gem5中的 NoC部分是Garnet实现的,但是Garnet并没有单独的时钟域,而是保持ruby一致,要做noc的DVFS,便是要改ruby的

改电压

#这里只是生成一个随便变量名,存一下值。改是和频率一起的
userssaved_voltage_domain = VoltageDomain(voltage = options.sys_voltage)
userssaved_voltage_domain = VoltageDomain(voltage =
['1V','0.9V','0.8V','0.7V'])

改频率

Create a seperate clock domain for Ruby

#改频率的同时顺便改一下电压值
system.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock,voltage_domain=userssaved_voltage_domain,domain_id = 0)
system.ruby.clk_domain.clock = ['1GHz','700MHz','400MHz','230MHz']system.dvfs_handler.domains = system.ruby.clk_domain
system.dvfs_handler.enableHandler = 1

system.ruby 对应GEM5 源代码解读

system.ruby 中的system

这里的system和 fs.py中的test_sys是一个东西,来自于

test_sys = makeLinuxX86System(test_mem_mode, np, bm[0], args.ruby, cmdline=cmdline)

而makeLinuxX86System 来在configs/common/FSConfig.py。
test_sys代表仿真的硬件系统
同时test_sys它也是gem5最终运行时的输入

Simulation.run(args, root, test_sys, FutureClass)

system.ruby 中的ruby

system.ruby 的文件路径

gem5/src/sim/System.py System.cc System.hh
然而 System.py System.cc System.hh 中都搜不到ruby,也就是他们并不自带ruby的定义。
而是在fs.py中,调用了 configs/ruby/Ruby.py
Ruby.create_system(
args, True, test_sys, test_sys.iobus, test_sys._dma_ports, bootmem
)

system.ruby 是什么

configs/ruby/Ruby.py 中,调用的create_system给test_sys添加了system.ruby 这个组件。
如果用户在fs.py这个层面的文件中不调用这个函数的,system 中是不会有system.ruby的。

def create_system(options,full_system,system,piobus=None,dma_ports=[],bootmem=None,cpus=None,
):system.ruby = RubySystem()

RubySystem() 是什么

路径在 gem5/src/mem/ruby/system/ RubySystem.py RubySystem.cc RubySystem.hh
在这里插入图片描述
RubySystem() 在 gem5/src/mem/ruby/system/ RubySystem.py中如下

class RubySystem(ClockedObject):type = "RubySystem"cxx_header = "mem/ruby/system/RubySystem.hh"cxx_class = "gem5::ruby::RubySystem"randomization = Param.Bool(False,"insert random delays on message enqueue times (if True, all message \buffers are enforced to have randomization; otherwise, a message \buffer set its own flag to enable/disable randomization)",)block_size_bytes = Param.UInt32(64, "default cache block size; must be a power of two")memory_size_bits = Param.UInt32(64, "number of bits that a memory address requires")phys_mem = Param.SimpleMemory(NULL, "")system = Param.System(Parent.any, "system object")access_backing_store = Param.Bool(False,"Use phys_mem as the functional \store and only use ruby for timing.",)# Profiler related configuration variableshot_lines = Param.Bool(False, "")all_instructions = Param.Bool(False, "")num_of_sequencers = Param.Int("")number_of_virtual_networks = Param.Unsigned("")

总结

我们现在知道了system. ruby 中,system是启动需要的硬件描述,ruby则是额外的加进去system的硬件模块的描述,这个增加的模块类名是RubySystem。 我们在下面两章节讲述ruby的voltage domain 和 clock domain.

ruby.clk_domain 对应GEM5 RUBY 源代码解读

在这里插入图片描述
system.ruby 是 RubySystem类的实例, RubySystem继承自ClockedObject
在这里插入图片描述
clockedObject是继承至Clocked 类。
clocked 类里有clockdomain
在这里插入图片描述
我们看gem5/src/sim/ClockedObject.py 可以看到clk_domain.

class ClockedObject(SimObject):type = "ClockedObject"abstract = Truecxx_header = "sim/clocked_object.hh"cxx_class = "gem5::ClockedObject"# The clock domain this clocked object belongs to, inheriting the# parent's clock domain by defaultclk_domain = Param.ClockDomain(Parent.clk_domain, "Clock domain")

ruby.clk_domain 总结

system.ruby.clk_domain是
1 system 从fs.py中调用了FSConfig.py中的函数(名字叫makeLinuxX86System)调用,生成了system。
2. system.ruby 从fs.py 中调用了Ruby.py中的函数(名字叫Ruby.create_system),生成了system.ruby =RubySystem()
3. RubySystem继承了clockedobject,clockedobject自带了clk_domain.

ruby.voltage_domain 对应GEM5 RUBY 源代码解读

ClockedObject 中没有voltage_domain,那么继承自ClockedObject 的RubySystem 哪里来的voltage_domain ?

所以我们看看

# Create a seperate clock domain for Rubytest_sys.ruby.clk_domain = SrcClockDomain(clock=args.ruby_clock, voltage_domain=test_sys.voltage_domain)

也就是说,voltage domain在ruby里其实只是clokdomain的附加。

SrcClockDomain 文件路径

gem5/src/sim/ClockDomain.py 中定义了 SrcClockDomain。
也就是和ClockDomain是同一个文件。

在这里插入图片描述

SrcClockDomain 是什么

没错,其实就是ClockDomain 的一个扩展版而已。而且扩展的这个电压也用的不多,可以认为只是文字上在clkdomain后上加了个后缀,以便power相关的读取。
更详细的说,X ghz才影响结果,X ghz顺便捎上了电压值 Y,这个Y不影响运行,最后结果跑完了生成一串Y值,用于类似于读excel得出power相关的结果。
总计就是电压值是附加的,附属于clk。

# Source clock domain with an actual clock, and a list of voltage and frequency
# op points
class SrcClockDomain(ClockDomain):type = "SrcClockDomain"cxx_header = "sim/clock_domain.hh"cxx_class = "gem5::SrcClockDomain"

总结

RubySystem继承了clockedobject,clockedobject自带了clk_domain.
同时, 将 RubySystem自带的clk_domain,丰富了一下,制定为带电压的clk_domain的扩展类,也就是SrcClockDomain这个类。

# Create a seperate clock domain for Rubytest_sys.ruby.clk_domain = SrcClockDomain(clock=args.ruby_clock, voltage_domain=test_sys.voltage_domain)

对应GEM5 源代码解读:dvfs_handler

文件路径

gem5/src/sim/ dvfs_handler.cc dvfs_handler.hh
在 dvfs_handler.hh 中:

include

55 #include "debug/DVFS.hh"

56 #include “params/DVFSHandler.hh”
57 #include “sim/clock_domain.hh”
58 #include “sim/eventq.hh”
59 #include “sim/sim_object.hh”

定义domain

180 private:
181 typedef std::map<DomainID, SrcClockDomain*> Domains;
182 Domains domains;

定义 enableHandler

bool enableHandler;

bool isEnabled() const { return enableHandler; }

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

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

相关文章

C++二分查找算法:查找和最小的 K 对数字

相关专题 二分查找相关题目 题目 给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1:…

采用Nexus搭建Maven私服

采用Nexus搭建Maven私服 1.采用docker安装 1.创建数据目录挂载的目录&#xff1a; /usr/local/springcloud_1113/nexus3/nexus-data2.查询并拉取镜像docker search nexus3docker pull sonatype/nexus33.查看拉取的镜像docker images4.创建docker容器&#xff1a;可能出现启动…

【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例 5.3.2 Father链接结构a. 定义树节点结构b. 创建新节点c. 主函数d. 代码整合 5.3.3 儿子链表链接结构a. 定义树节点结构b. 创建新节点c. 添加…

【IDEA 使用easyAPI、easyYapi、Apifox helper等插件时,导出接口文档缺少代码字段注释的相关内容、校验规则的解决方法】

问题 IDEA 使用easyAPI、easyYapi、Apifox helper等插件时&#xff0c;导出的接口文档上面&#xff0c;缺少我们代码里的注解字段&#xff0c;如我们规定了NOTNULL、字段描述等。 问题链接&#xff0c;几个月之前碰到过&#xff0c;并提问了&#xff0c;到现在解决&#xff0c…

Docker之DockerFile解析

DockerFile解析 是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 概述 官网 https://docs.docker.com/engine/reference/builder/ 构建三步骤 编写Dockerfile文件 docker build命令构建镜像 docker run依镜像运…

元宇宙3D云展厅应用到汽车销售的方案及特点

为了紧紧抓住年轻消费者的需求&#xff0c;汽车销售行业也正在经历一场深刻的变革。在这个变革的前沿&#xff0c;元宇宙3D汽车展厅作为一项全新技术闪亮登场&#xff0c;打破了传统汽车销售模式的限制&#xff0c;为消费者带来了前所未有的购车体验。 元宇宙3D汽车展厅采用了尖…

进程概述

文章目录 计算机算机组成因特尔CPU型号摩尔定律衡量CPU的指标指令&#xff08;Instruction)操作系统&#xff08;Operating System&#xff09;虚拟地址空间&#xff08;Virtual Address Space&#xff09;进程(Process/task)进程管理(PCB - 进程控制块)进程控制块&#xff08;…

基于SSM的古董拍卖系统

基于SSM的古董拍卖系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 拍卖界面 管理员界面 摘要 古董拍卖系统是一个基于SSM框架&#xff08;Spring …

JRC Monthly Water History, v1.4数据集

简介&#xff1a; JRC Monthly Water History产品&#xff0c;是利用1984至2020年获取的landsat5、landsat7和landsat8的卫星影像&#xff0c;生成的一套30米分辨率的全球地表水覆盖的月度地表水监测地图集。该数据集共有442景数据&#xff0c;包含1984年3月至2020年12月间的月…

Kubernetes Dashboard部署ImagePullBackOff问题处理

通常&#xff0c;出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤&#xff1a; 1. 检查Pod的描述信息&#xff1a; kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…

项目踩坑之面试遇到的问题及解决

第一点&#xff1a; 问题 遇到的问题之&#xff1a;在实现后台管理端-账户操作的时候&#xff0c;添加员工的时候如果重复添加同一个员工&#xff0c;会触发一个数据库唯一约束异常&#xff0c;但客户端无法清晰的理解这个错误&#xff0c;所以我们就对新增员工的代码进行try…

4.1 Windows驱动开发:内核中进程与句柄互转

在内核开发中&#xff0c;经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符&#xff08;PID&#xff09;来标识&#xff0c;而句柄是指对内核对象的引用。在Windows内核中&#xff0c;EProcess结构表示一个进程&#xff0c;而HANDLE是一个句柄。 为了实…

kubernetes 高可用集群

目录 一、haproxy负载均衡 二、pacemaker高可用 三、部署control-plane 四、部署worker node 实验环境 主机名 IP 角色 docker 192.168.67.10 harbor k8s1 192.168.67.11 control-plane k8s2 192.168.67.12 control-plane k8s3 192.168.67.13 control-plane k8s…

vscode文件夹折叠问题

今天发现一个vscode的文件夹显示的问题&#xff0c;首先是这样的&#xff0c;就是我的文件夹里又一个子文件夹&#xff0c;子文件夹里有一些文件&#xff0c;但是我发现无法折叠起这个子文件夹&#xff0c;总是显示全部的文件&#xff0c;这让我备份很难&#xff0c;具体参考 h…

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动&#xff0c;活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为演讲、动手实操&#xff0c;让开发者通过一个下午的时间增进对 Ser…

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

仿射变换是一种二维变换&#xff0c;它可以将一个二维图形映射到另一个二维图形上&#xff0c;保持了图形的“形状”和“大小”不变&#xff0c;但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示&#xff0c;该矩阵包含了六个参数&#xff0c;可以进行平移…

获取虎牙直播源

为了今天得LOL总决赛 然后想着下午看看 但是网页看占用高 就想起来有个直播源 也不复杂看了大概一个小时 没啥问题 进入虎牙页面只有 直接F12 网络 然后 看这个长条 一直在获取 发送 那就选中这个区间 找到都是数字这一条 如果直接访问的话会一直下载 我这都取消了 然后 打开…

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗&#xff1f; 答&#xff1a; explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下&#xff1a; id&#xff1a;在一个大的查询语句中&#xff0c;每个 select 关键字都对应一个唯一的 id select_type&#xff1a;…

八股文-面向对象的理解

近年来&#xff0c;IT行业的环境相较以往显得有些严峻&#xff0c;因此一直以来&#xff0c;我都怀有一个愿望&#xff0c;希望能够创建一个分享面试经验的网站。由于个人有些懒惰&#xff0c;也较为喜欢玩乐&#xff0c;导致计划迟迟未能实现。然而&#xff0c;随着年底的临近…