> On Sept. 15, 2015, 7:18 a.m., Andreas Hansson wrote:
> > Hi Brandon,
> > 
> > Does this mean we can compile Ruby once (for all protocols), and then 
> > dynamically instantiate it? If so, that's great!
> > 
> > The next step would be to build the entire src/mem tree once for all ISAs.

Sorry, that's not what this patch is meant to do; honestly, I haven't even put 
any thought into what you mentioned. The build is per-protocol still.

The goal here is to have multiple ruby systems that can invoke the same 
protocol. Currently, that's not possible, which means that it's not possible to 
simulate multiple "systems" within a single gem5 invocation.


- Brandon


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/3113/#review7178
-----------------------------------------------------------


On Sept. 14, 2015, 11:58 p.m., Brandon Potter wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/3113/
> -----------------------------------------------------------
> 
> (Updated Sept. 14, 2015, 11:58 p.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 11093:3c32e2cb1c87
> ---------------------------
> ruby: allows multiple instances of ruby to be invoked
> 
> This patch removes the restriction that there can only be a single ruby
> system object in a given simulation. With the configuration supplied, it is
> possible to run an instance of ruby with any of the supplied topologies.
> 
> The problem centers around the use of globals and static class members in the
> ruby source. Conceptually, this prohibits multi-instance simulations
> since the ruby systems end up sharing values which should be distinct. (The
> earliest manifestation of this problem occurs when important runtime
> components use shared variables for MachineType sanity checks which will
> trigger failures.)
> 
> The idea behind the patch is to move as many as the statics/globals as
> necessary into the ruby system object. The ruby system object acts as the
> single point of reference for the child objects which needed the
> globals/statics. With multi-instance runs, each ruby system object will
> contain distinct values for the previous globals/statics. Unfortunately, this
> requires passing the ruby system pointer throughout the object hierarchy and
> may incur some minor performance overhead due to extra indirect references
> through the ruby system object.
> 
> 
> Diffs
> -----
> 
>   src/mem/protocol/MESI_Two_Level-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   configs/common/Options.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   configs/example/multi-system-se.py PRE-CREATION 
>   configs/ruby/Ruby.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/Check.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Three_Level-L0cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Three_Level-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/parser.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/symbols/StateMachine.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/symbols/Type.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/python/swig/pyobject.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubySystem.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/WireBuffer.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/CacheRecorder.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/CacheRecorder.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/DMASequencer.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubyPort.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubyPort.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubySystem.hh PRE-CREATION 
>   src/mem/ruby/structures/TBETable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/TimerTable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/TimerTable.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/WireBuffer.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-dir.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-dma.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/Network_test-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/Network_test-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_ComponentMapping.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Defines.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Exports.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Types.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Util.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/SConscript 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/Address.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/Address.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/DataBlock.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/DataBlock.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/NetDest.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/NetDest.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/SubBlock.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/SubBlock.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/AbstractBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BlockBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BlockBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BulkBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BulkBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/H3BloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/LSB_CountingBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/MultiBitSelBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/MultiGrainBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/NonCountingBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Topology.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Topology.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/profiler/AddressProfiler.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/profiler/Profiler.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/AbstractController.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/AbstractController.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/Controller.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/Message.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubyRequest.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubySlicc_Util.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/CacheMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/CacheMemory.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PerfectCacheMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PersistentTable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PersistentTable.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/Prefetcher.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/Prefetcher.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyCache.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyPrefetcher.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/EnqueueStatementAST.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/NewExprAST.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/ObjDeclAST.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
> 
> Diff: http://reviews.gem5.org/r/3113/diff/
> 
> 
> Testing
> -------
> 
> gem5/util/regress (to check builds) and custom tests (which use the new 
> configuration)
> 
> 
> Thanks,
> 
> Brandon Potter
> 
>

_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to