On Sept. 15, 2015, 4:19 p.m., Brandon Potter wrote:
> > Is there any way to make m_ruby_system implicit in SLICC? I really don't 
> > like having to change all of the protocols.
> 
> Brandon Potter wrote:
>     I don't really have satisfactory answer to the last question.
>     
>     There was so much complexity involved when we were trying to tease out 
> the statics and globals that we're pretty sure that the solution is 
> sub-optimal. As far as slicc, the changes just seemed like the easiest thing 
> to do at the time. We had an intern, David Hashe, who made the modifications 
> to slicc; he was the one who figured out how to add the new pointer type and 
> dereference it in the code. (So, the blame/kudos should go to him on that 
> front. He contributed the majority of the patch in its current state so it's 
> kudos in my opinion.) Anyways, we knew what we wanted slicc to generate so we 
> beat on it until we were able to achieve that. I'm open to suggestions on how 
> to clean it up.

Instead of making m_ruby_system implicit in SLICC, it can be inherited (along 
with all the existing functions) with my recommendation for a heritable class, 
RubySystemComponent. Following that path would eliminate the need for most of 
the changes in this patch. Please see my recommendations.


- Joel


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


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