当前位置: 首页 > news >正文

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; }

相关文章:

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

简介 gem5中的 NoC部分是Garnet实现的&#xff0c;但是Garnet并没有单独的时钟域&#xff0c;而是保持ruby一致&#xff0c;要做noc的DVFS&#xff0c;便是要改ruby的 改电压 #这里只是生成一个随便变量名&#xff0c;存一下值。改是和频率一起的 userssaved_voltage_domain…...

java命令 jmap 堆参数分析

jmap -heap pid 展示pid的整体堆信息 bash-4.4# jmap -heap 10 Attaching to process ID 10, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.172-b11using thread-local object allocation. Garbage-First (G1) GC with 8 th…...

OpenCV C++ 图像处理实战 ——《OCR字符识别》

OpenCV C++ 图像处理实战 ——《OCR字符识别》 一、结果演示二、tesseract库配置2.1下载编译三、OCR字符识别3.1 文本检测方式3.1.1 RIL_BLOCK3.1.2 RIL_PARA3.1.3 RIL_TEXTLINE3.1.4 RIL_WORD3.1.5 RIL_SYMBOL3.2 英文文本检测3.3 中英文本检测四、源码测试图像下载总结一、结…...

在MySQL中创建新的数据库,可以使用命令,也可以通过MySQL工作台

摘要:在本教程中,你将学习如何使用MySQL CREATE DATABASE语句在MySQL数据库服务器上创建新数据库。 MySQL CREATE DATABASE语句简介 要在MySQL中创建新数据库,可以使用CREATE DATABASE语句。以下说明了CREATE DATABASE语句的基本语法: CREATE DATABASE [IF NOT EXISTS] …...

2311rust到31版本更新

1.27.1稳定版 在此修补程序前,下例在编译器内部恐慌. fn main() {let a vec!["".to_string()];a.iter().enumerate().take_while(|(_, &t)| false).collect::<Vec<_>>(); }1.27.1拒绝上述代码,并显示以下错误消息: error[E0507]: cannot move ou…...

【Python百宝箱】视觉算法秀:Python图像处理舞台上的巅峰对决

前言 在数字化时代&#xff0c;图像处理技术已经成为科技和计算机领域中不可或缺的一部分。从医学影像到计算机视觉&#xff0c;图像处理为我们提供了无限的可能性。Python作为一种灵活而强大的编程语言&#xff0c;在图像处理领域表现出色&#xff0c;拥有丰富的库和工具。本…...

Flutter 中在单个屏幕上实现多个列表

今天&#xff0c;我将提供一个实际的示例&#xff0c;演示如何在单个页面上实现多个列表&#xff0c;这些列表可以水平排列、网格格式、垂直排列&#xff0c;甚至是这些常用布局的组合。 下面是要做的&#xff1a; 实现 让我们从创建一个包含产品所有属性的产品模型开始。 …...

YOLOv8 加持 MobileNetv3,目标检测新篇章

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …...

.gitignore 文件——如何在 Git 中忽略文件和文件夹详细教程

文章目录 什么是 .gitignore 文件&#xff1f;.gitignore 文件是用来做什么的&#xff1f;如何创建一个 .gitignore 文件&#xff1f;在 .gitignore 文件中应包括什么&#xff1f;如何在 Git 中忽略一个文件和文件夹如何忽略以前提交的文件 什么是 .gitignore 文件&#xff1f;…...

【数据结构(二)】单链表(3)

文章目录 1. 链表介绍2. 单链表应用实例2.1. 顺序添加方式2.1.1. 思路分析2.1.2. 代码实现 2.2. 按照编号顺序添加方式2.2.1. 思路分析2.2.2. 代码实现 3. 单链表节点的修改3.1. 思路分析3.2. 代码实现 4. 单链表节点的删除4.1. 思路分析4.2. 代码实现 5. 单链表常见面试题5.1.…...

创新案例|云服务平台HashiCorp是如何构建开源社区实现B2B增长飞轮

社区文化是HashiCorp企业文化的重要组成部分。虽然众多公司声称自己是社区驱动&#xff0c;但实际付诸行动的很少。与众不同的是&#xff0c;HashiCorp从一开始就将社区视为战略方针的核心&#xff0c;这也影响和塑造了公司今天的发展方向。社区不仅是执行策略之一&#xff0c;…...

2024年软件测试面试必看系列,看完去面试你会感谢我的!!

朋友圈点赞的测试用例 功能测试 1点赞后是否显示结果 2.点赞后是否可以取消; 3.点赞取消后是否可以重复点赞; 4.共同好友点赞后&#xff0c;是否有消息提醒; 5.非共同好友点赞后&#xff0c;是否有消息提醒; 6.点击点赞人昵称&#xff0c;是否可以跳转到他/她的主页; 7.自己能…...

01ctfer 文件上传

01ctfer 文件上传 启动靶场 访问该地址 代码审计 <?php header("Content-Type:text/html; charsetutf-8"); // 每5分钟会清除一次目录下上传的文件 require_once(pclzip.lib.php);if(!$_FILES){echo <!DOCTYPE html> <html lang"zh">…...

2.2 调用星火大模型的API

调用星火大模型的API 1 申请API调用权限&#xff1a;2 调用原生星火 API3 统一API调用方式 项目仓库地址&#xff1a;https://github.com/datawhalechina/llm-universe 讯飞星火认知大模型&#xff0c;由科大讯飞于2023年5月推出的中文大模型&#xff0c;也是国内大模型的代表…...

云原生是整个信息化行业的未来,一文彻底搞懂云原生

云原生这个词来自英语的Cloud Native的翻译&#xff0c;云原生是已经存多年在术语&#xff0c;真正开始获得关注的是在2015年到2016年。 这归因于这几年逐渐发布的Docker的兴起。 会有越来越多的企业和组织开始关注到它&#xff0c;并把他们的工作负载运行在云端的益处。无论是…...

【Redis】RedisTemplate最全的常用方法

文章目录 前言1.RedisTemplate常用方法2.String类型3.Hash类型4.List类型5.Set类型6.zSet类型 前言 RedisTemplate常用方法String类型Hash类型List类型Set类型zSet类型 Redis常用的数据类型&#xff1a;String、Hash、List、Set、zSet 1.RedisTemplate常用方法 redisTempla…...

图像倾斜角度求取-Radon变换

Radon算法 Radon&#xff08;拉东&#xff09;算法是一种通过定方向投影叠加&#xff0c;找到最大投影值时角度&#xff0c;从而确定图像倾斜角度的算法。具体过程如图所示 图1 Radon变换算法 Radon计算示例 对于纹理方向明显的图像&#xff0c;如图2所示&#xff0c;可以通…...

如何在本地搭建Oracle数据库实现公网环境下通过PLSQL工具进行远程访问

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…...

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM) 目录 时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)预测效果基本介绍程序设计参考资料预测效果 基本介绍 时序预测 | Python实现ConvLSTM卷积长短期记忆神…...

qtpdfium的编译及读取pdf文件和一些简单操作

qtpdfium是谷歌的一款开源项目&#xff0c;它的内核是基于国内的福昕pdf&#xff0c;许可协议为 BSD 3-Clause&#xff0c;允许用于闭源商业行为 下载 我们可以从git上进行下载&#xff0c;github&#xff0c;如果嫌下载速度慢&#xff0c;可以从csdn进行下载csdn 下载完成之…...

如何快速上手SoundMind:10分钟完成音频逻辑推理模型训练

如何快速上手SoundMind&#xff1a;10分钟完成音频逻辑推理模型训练 【免费下载链接】SoundMind We introduce the Audio Logical Reasoning (ALR) dataset, consisting of 6,446 text-audio annotated samples specifically designed for complex reasoning tasks. Building o…...

如何用YOLOv5实现FPS游戏智能瞄准:完整实战指南

如何用YOLOv5实现FPS游戏智能瞄准&#xff1a;完整实战指南 【免费下载链接】FPSAutomaticAiming 基于yolov5的FPS游戏AI。 项目地址: https://gitcode.com/gh_mirrors/fp/FPSAutomaticAiming 在竞技射击游戏中&#xff0c;精准瞄准是决定胜负的关键因素&#xff0c;而F…...

事故数据四年连降,为何山西煤矿的命还是悬在一根绳上?

说实话&#xff0c;写到山西煤矿这四个字&#xff0c;我心里就咯噔一下。2026年5月22日19时29分&#xff0c;山西长治市沁源县山西通洲集团留神峪煤业有限公司井下发生瓦斯爆炸事故&#xff0c;截至到写稿&#xff0c;事故已造成90人遇难。看的心里堵得慌。我特意去翻了翻这些年…...

Monkey测试进阶:黑白名单搭配这些隐藏参数,让你的安卓稳定性测试效率翻倍

Monkey测试进阶&#xff1a;黑白名单搭配这些隐藏参数&#xff0c;让你的安卓稳定性测试效率翻倍在持续集成和自动化测试成为标配的今天&#xff0c;Monkey测试早已不再是简单的随机事件生成工具。当你的测试场景从单次手动执行升级到夜间批量测试或CI流水线时&#xff0c;如何…...

WSABuilds安装挑战:从“包注册失败“到“架构不匹配“的完整解决指南

WSABuilds安装挑战&#xff1a;从"包注册失败"到"架构不匹配"的完整解决指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/o…...

Transformer解码器在量子纠错中的应用:突破表面码实时解码瓶颈

1. 项目概述与核心挑战 量子计算这行干久了&#xff0c;你总会遇到一个绕不开的“拦路虎”&#xff1a;量子纠错。这玩意儿是通往实用化、容错量子计算机的必经之路&#xff0c;但其中的解码问题&#xff0c;尤其是针对表面码这类稳定子码的解码&#xff0c;其复杂度和实时性要…...

Beyond Compare 5完整激活教程:3种方法快速生成永久授权密钥

Beyond Compare 5完整激活教程&#xff1a;3种方法快速生成永久授权密钥 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天试用期结束后无法继续使用而烦恼吗&#x…...

NCM转MP3终极指南:3分钟解锁你的网易云音乐自由

NCM转MP3终极指南&#xff1a;3分钟解锁你的网易云音乐自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲换个设备就无法播放而烦恼吗&#xff1f;那些神秘的.ncm格式文件&#xff0c;只能在官方应用里…...

从红宝石到光纤:固体激光器家族里,谁才是工业加工界的‘六边形战士’?

从红宝石到光纤&#xff1a;固体激光器家族里&#xff0c;谁才是工业加工界的‘六边形战士’&#xff1f; 在金属切割车间里&#xff0c;激光束正以毫米级精度划过不锈钢板&#xff1b;精密电子产线上&#xff0c;纳米级激光打标机为电路板刻印追溯码&#xff1b;汽车焊接工段…...

虚拟化PCIe直通故障排查:BIOS设置、IOMMU组与QEMU参数全链路解析

1. 这不是驱动问题&#xff0c;是PCIe拓扑在“装睡” “虚拟化服务器PCI报错”——这六个字&#xff0c;我去年在三个不同客户的机房里反复听到过&#xff0c;每次都是凌晨两点被电话叫醒。运维同事第一反应永远是重装驱动、更新固件、换网卡&#xff0c;折腾两天后发现报错照旧…...