有口碑的唐山网站建设,品质好物推荐,廊坊学校网站建设,花生壳做网站速度简介
gem5中的 NoC部分是Garnet实现的#xff0c;但是Garnet并没有单独的时钟域#xff0c;而是保持ruby一致#xff0c;要做noc的DVFS#xff0c;便是要改ruby的
改电压
#这里只是生成一个随便变量名#xff0c;存一下值。改是和频率一起的
userssaved_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_domainuserssaved_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 1system.ruby 对应GEM5 源代码解读
system.ruby 中的system
这里的system和 fs.py中的test_sys是一个东西来自于
test_sys makeLinuxX86System(test_mem_mode, np, bm[0], args.ruby, cmdlinecmdline)而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,piobusNone,dma_ports[],bootmemNone,cpusNone,
):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 RubySystemcxx_header mem/ruby/system/RubySystem.hhcxx_class gem5::ruby::RubySystemrandomization 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 ClockedObjectabstract Truecxx_header sim/clocked_object.hhcxx_class gem5::ClockedObject# The clock domain this clocked object belongs to, inheriting the# parents 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继承了clockedobjectclockedobject自带了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(clockargs.ruby_clock, voltage_domaintest_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 SrcClockDomaincxx_header sim/clock_domain.hhcxx_class gem5::SrcClockDomain总结
RubySystem继承了clockedobjectclockedobject自带了clk_domain. 同时 将 RubySystem自带的clk_domain丰富了一下制定为带电压的clk_domain的扩展类也就是SrcClockDomain这个类。
# Create a seperate clock domain for Rubytest_sys.ruby.clk_domain SrcClockDomain(clockargs.ruby_clock, voltage_domaintest_sys.voltage_domain)对应GEM5 源代码解读dvfs_handler
文件路径
gem5/src/sim/ dvfs_handler.cc dvfs_handler.hh 在 dvfs_handler.hh 中
include
55 #include debug/DVFS.hh56 #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::mapDomainID, SrcClockDomain* Domains; 182 Domains domains;
定义 enableHandler
bool enableHandler;
bool isEnabled() const { return enableHandler; }