当前位置: 首页 > 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; }

http://www.lryc.cn/news/235841.html

相关文章:

  • java命令 jmap 堆参数分析
  • OpenCV C++ 图像处理实战 ——《OCR字符识别》
  • 在MySQL中创建新的数据库,可以使用命令,也可以通过MySQL工作台
  • 2311rust到31版本更新
  • 【Python百宝箱】视觉算法秀:Python图像处理舞台上的巅峰对决
  • Flutter 中在单个屏幕上实现多个列表
  • YOLOv8 加持 MobileNetv3,目标检测新篇章
  • .gitignore 文件——如何在 Git 中忽略文件和文件夹详细教程
  • 【数据结构(二)】单链表(3)
  • 创新案例|云服务平台HashiCorp是如何构建开源社区实现B2B增长飞轮
  • 2024年软件测试面试必看系列,看完去面试你会感谢我的!!
  • 01ctfer 文件上传
  • 2.2 调用星火大模型的API
  • 云原生是整个信息化行业的未来,一文彻底搞懂云原生
  • 【Redis】RedisTemplate最全的常用方法
  • 图像倾斜角度求取-Radon变换
  • 如何在本地搭建Oracle数据库实现公网环境下通过PLSQL工具进行远程访问
  • 时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)
  • qtpdfium的编译及读取pdf文件和一些简单操作
  • ClickHouse查看执行计划
  • 2023-11-17 VsCode使用makefile进行多文件编译
  • Network(四)NAT实现方式与VRRP概述
  • C#_键盘钩子
  • YOLO免费数据集网站收集
  • 拼图小游戏
  • 卷积神经网络(CNN)天气识别
  • Linux进程间通信之匿名管道
  • 【PTA题目】6-19 使用函数输出指定范围内的Fibonacci数 分数 20
  • 运行ps显示msvcp140.dll丢失怎么恢复?msvcp140.dll快速解决的4个不同方法
  • Java多线程(3)