From bfe7ee96ad5abec40639d47dc2b0512d6baa0f81 Mon Sep 17 00:00:00 2001 From: Brandon Potter Date: Fri, 10 Jul 2015 16:05:24 -0500 Subject: [PATCH] ruby: replace global g_abs_controls with per-RubySystem var This is another step in the process of removing global variables from Ruby to enable multiple RubySystem instances in a single simulation. The list of abstract controllers is per-RubySystem and should be represented that way, rather than as a global. Since this is the last remaining Ruby global variable, the src/mem/ruby/Common/Global.* files are also removed. --- .../directedtest/RubyDirectedTester.hh | 1 - src/cpu/testers/rubytest/Check.hh | 1 - src/cpu/testers/rubytest/CheckTable.hh | 1 - src/cpu/testers/rubytest/RubyTester.cc | 1 - src/cpu/testers/rubytest/RubyTester.hh | 1 - src/mem/ruby/common/Global.cc | 33 --------------- src/mem/ruby/common/Global.hh | 41 ------------------- src/mem/ruby/common/SConscript | 1 - .../garnet/fixed-pipeline/GarnetNetwork_d.cc | 1 - .../garnet/fixed-pipeline/OutVcState_d.cc | 1 - .../garnet/flexible-pipeline/GarnetNetwork.cc | 1 - src/mem/ruby/network/simple/Throttle.hh | 1 - .../ruby/profiler/AccessTraceForAddress.hh | 1 - src/mem/ruby/profiler/Profiler.cc | 15 +++---- src/mem/ruby/profiler/Profiler.hh | 5 ++- src/mem/ruby/structures/RubyMemoryControl.cc | 1 - src/mem/ruby/structures/RubyMemoryControl.hh | 1 - src/mem/ruby/structures/TimerTable.cc | 1 - src/mem/ruby/system/Sequencer.cc | 1 - src/mem/ruby/system/System.cc | 6 +-- src/mem/ruby/system/System.hh | 2 + src/mem/slicc/symbols/StateMachine.py | 14 +++---- src/mem/slicc/symbols/Type.py | 1 - 23 files changed, 22 insertions(+), 110 deletions(-) delete mode 100644 src/mem/ruby/common/Global.cc delete mode 100644 src/mem/ruby/common/Global.hh diff --git a/src/cpu/testers/directedtest/RubyDirectedTester.hh b/src/cpu/testers/directedtest/RubyDirectedTester.hh index 0e3b1002a..b148c390c 100644 --- a/src/cpu/testers/directedtest/RubyDirectedTester.hh +++ b/src/cpu/testers/directedtest/RubyDirectedTester.hh @@ -35,7 +35,6 @@ #include #include "mem/ruby/common/DataBlock.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/SubBlock.hh" #include "mem/ruby/system/RubyPort.hh" #include "mem/mem_object.hh" diff --git a/src/cpu/testers/rubytest/Check.hh b/src/cpu/testers/rubytest/Check.hh index 3e8061ee7..a477cefeb 100644 --- a/src/cpu/testers/rubytest/Check.hh +++ b/src/cpu/testers/rubytest/Check.hh @@ -36,7 +36,6 @@ #include "mem/protocol/RubyAccessMode.hh" #include "mem/protocol/TesterStatus.hh" #include "mem/ruby/common/Address.hh" -#include "mem/ruby/common/Global.hh" class SubBlock; diff --git a/src/cpu/testers/rubytest/CheckTable.hh b/src/cpu/testers/rubytest/CheckTable.hh index 35ea7440a..f03ad067d 100644 --- a/src/cpu/testers/rubytest/CheckTable.hh +++ b/src/cpu/testers/rubytest/CheckTable.hh @@ -35,7 +35,6 @@ #include "base/hashmap.hh" #include "mem/ruby/common/Address.hh" -#include "mem/ruby/common/Global.hh" class Check; class RubyTester; diff --git a/src/cpu/testers/rubytest/RubyTester.cc b/src/cpu/testers/rubytest/RubyTester.cc index 6ac252612..e0b689978 100644 --- a/src/cpu/testers/rubytest/RubyTester.cc +++ b/src/cpu/testers/rubytest/RubyTester.cc @@ -43,7 +43,6 @@ #include "cpu/testers/rubytest/Check.hh" #include "cpu/testers/rubytest/RubyTester.hh" #include "debug/RubyTest.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/SubBlock.hh" #include "mem/ruby/system/System.hh" #include "sim/sim_exit.hh" diff --git a/src/cpu/testers/rubytest/RubyTester.hh b/src/cpu/testers/rubytest/RubyTester.hh index c0ad554c6..1b1882da7 100644 --- a/src/cpu/testers/rubytest/RubyTester.hh +++ b/src/cpu/testers/rubytest/RubyTester.hh @@ -47,7 +47,6 @@ #include #include "cpu/testers/rubytest/CheckTable.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/SubBlock.hh" #include "mem/ruby/system/RubyPort.hh" #include "mem/mem_object.hh" diff --git a/src/mem/ruby/common/Global.cc b/src/mem/ruby/common/Global.cc deleted file mode 100644 index c82a9c73d..000000000 --- a/src/mem/ruby/common/Global.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "mem/ruby/common/Global.hh" - -using namespace std; - -vector > g_abs_controls; diff --git a/src/mem/ruby/common/Global.hh b/src/mem/ruby/common/Global.hh deleted file mode 100644 index 2b07ffbc0..000000000 --- a/src/mem/ruby/common/Global.hh +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __MEM_RUBY_COMMON_GLOBAL_HH__ -#define __MEM_RUBY_COMMON_GLOBAL_HH__ - -#include -#include - -#include "base/str.hh" -#include "base/types.hh" - -class AbstractController; -extern std::vector > g_abs_controls; - -#endif // __MEM_RUBY_COMMON_GLOBAL_HH__ diff --git a/src/mem/ruby/common/SConscript b/src/mem/ruby/common/SConscript index c7e774b47..3c149388a 100644 --- a/src/mem/ruby/common/SConscript +++ b/src/mem/ruby/common/SConscript @@ -36,7 +36,6 @@ if env['PROTOCOL'] == 'None': Source('Address.cc') Source('Consumer.cc') Source('DataBlock.cc') -Source('Global.cc') Source('Histogram.cc') Source('NetDest.cc') Source('Set.cc') diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc index d16db76ca..5aa967e8f 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc @@ -32,7 +32,6 @@ #include "base/cast.hh" #include "base/stl_helpers.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/NetDest.hh" #include "mem/ruby/network/garnet/fixed-pipeline/CreditLink_d.hh" #include "mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.hh" diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc index a11bf0c2d..d0a422f1f 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc @@ -28,7 +28,6 @@ * Authors: Niket Agarwal */ -#include "mem/ruby/common/Global.hh" #include "mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.hh" #include "mem/ruby/system/System.hh" diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc index 091a0077d..7a304be28 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc @@ -32,7 +32,6 @@ #include "base/cast.hh" #include "base/stl_helpers.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/NetDest.hh" #include "mem/ruby/network/BasicLink.hh" #include "mem/ruby/network/garnet/flexible-pipeline/GarnetLink.hh" diff --git a/src/mem/ruby/network/simple/Throttle.hh b/src/mem/ruby/network/simple/Throttle.hh index 19b0fcd35..85bf9691a 100644 --- a/src/mem/ruby/network/simple/Throttle.hh +++ b/src/mem/ruby/network/simple/Throttle.hh @@ -43,7 +43,6 @@ #include #include "mem/ruby/common/Consumer.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/network/Network.hh" #include "mem/ruby/system/System.hh" diff --git a/src/mem/ruby/profiler/AccessTraceForAddress.hh b/src/mem/ruby/profiler/AccessTraceForAddress.hh index 289b83a3a..acd03a3fa 100644 --- a/src/mem/ruby/profiler/AccessTraceForAddress.hh +++ b/src/mem/ruby/profiler/AccessTraceForAddress.hh @@ -34,7 +34,6 @@ #include "mem/protocol/RubyAccessMode.hh" #include "mem/protocol/RubyRequestType.hh" #include "mem/ruby/common/Address.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/Set.hh" class Histogram; diff --git a/src/mem/ruby/profiler/Profiler.cc b/src/mem/ruby/profiler/Profiler.cc index 070db6807..7decd497a 100644 --- a/src/mem/ruby/profiler/Profiler.cc +++ b/src/mem/ruby/profiler/Profiler.cc @@ -60,7 +60,8 @@ using namespace std; using m5::stl_helpers::operator<<; -Profiler::Profiler(const RubySystemParams *p) +Profiler::Profiler(const RubySystemParams *p, RubySystem *rs) + : m_ruby_system(rs) { m_hot_lines = p->hot_lines; m_all_instructions = p->all_instructions; @@ -253,8 +254,8 @@ Profiler::collateStats() uint32_t numVNets = Network::getNumberOfVirtualNetworks(); for (uint32_t i = 0; i < MachineType_NUM; i++) { for (map::iterator it = - g_abs_controls[i].begin(); - it != g_abs_controls[i].end(); ++it) { + m_ruby_system->m_abstract_controls[i].begin(); + it != m_ruby_system->m_abstract_controls[i].end(); ++it) { AbstractController *ctr = (*it).second; delayHistogram.add(ctr->getDelayHist()); @@ -267,8 +268,8 @@ Profiler::collateStats() for (uint32_t i = 0; i < MachineType_NUM; i++) { for (map::iterator it = - g_abs_controls[i].begin(); - it != g_abs_controls[i].end(); ++it) { + m_ruby_system->m_abstract_controls[i].begin(); + it != m_ruby_system->m_abstract_controls[i].end(); ++it) { AbstractController *ctr = (*it).second; Sequencer *seq = ctr->getSequencer(); @@ -280,8 +281,8 @@ Profiler::collateStats() for (uint32_t i = 0; i < MachineType_NUM; i++) { for (map::iterator it = - g_abs_controls[i].begin(); - it != g_abs_controls[i].end(); ++it) { + m_ruby_system->m_abstract_controls[i].begin(); + it != m_ruby_system->m_abstract_controls[i].end(); ++it) { AbstractController *ctr = (*it).second; Sequencer *seq = ctr->getSequencer(); diff --git a/src/mem/ruby/profiler/Profiler.hh b/src/mem/ruby/profiler/Profiler.hh index 5b1c9fe1e..146beadd6 100644 --- a/src/mem/ruby/profiler/Profiler.hh +++ b/src/mem/ruby/profiler/Profiler.hh @@ -56,7 +56,6 @@ #include "mem/protocol/PrefetchBit.hh" #include "mem/protocol/RubyAccessMode.hh" #include "mem/protocol/RubyRequestType.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/common/MachineID.hh" #include "params/RubySystem.hh" @@ -66,9 +65,11 @@ class AddressProfiler; class Profiler { public: - Profiler(const RubySystemParams *params); + Profiler(const RubySystemParams *params, RubySystem *rs); ~Profiler(); + RubySystem *m_ruby_system; + void wakeup(); void regStats(const std::string &name); void collateStats(); diff --git a/src/mem/ruby/structures/RubyMemoryControl.cc b/src/mem/ruby/structures/RubyMemoryControl.cc index 6cd9bdf41..9cf8673a2 100644 --- a/src/mem/ruby/structures/RubyMemoryControl.cc +++ b/src/mem/ruby/structures/RubyMemoryControl.cc @@ -110,7 +110,6 @@ #include "base/random.hh" #include "debug/RubyMemory.hh" #include "mem/ruby/common/Address.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/profiler/Profiler.hh" #include "mem/ruby/slicc_interface/Message.hh" #include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh" diff --git a/src/mem/ruby/structures/RubyMemoryControl.hh b/src/mem/ruby/structures/RubyMemoryControl.hh index d69e8f435..c7bebc447 100644 --- a/src/mem/ruby/structures/RubyMemoryControl.hh +++ b/src/mem/ruby/structures/RubyMemoryControl.hh @@ -37,7 +37,6 @@ #include "mem/abstract_mem.hh" #include "mem/protocol/MemoryMsg.hh" #include "mem/ruby/common/Address.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/profiler/MemCntrlProfiler.hh" #include "mem/ruby/structures/MemoryNode.hh" #include "mem/ruby/system/System.hh" diff --git a/src/mem/ruby/structures/TimerTable.cc b/src/mem/ruby/structures/TimerTable.cc index 84c096b05..d40ae2b79 100644 --- a/src/mem/ruby/structures/TimerTable.cc +++ b/src/mem/ruby/structures/TimerTable.cc @@ -26,7 +26,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "mem/ruby/common/Global.hh" #include "mem/ruby/structures/TimerTable.hh" #include "mem/ruby/system/System.hh" diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc index f64e24fdd..e2be52083 100644 --- a/src/mem/ruby/system/Sequencer.cc +++ b/src/mem/ruby/system/Sequencer.cc @@ -36,7 +36,6 @@ #include "debug/RubyStats.hh" #include "mem/protocol/PrefetchBit.hh" #include "mem/protocol/RubyAccessMode.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/profiler/Profiler.hh" #include "mem/ruby/slicc_interface/RubyRequest.hh" #include "mem/ruby/system/Sequencer.hh" diff --git a/src/mem/ruby/system/System.cc b/src/mem/ruby/system/System.cc index 128d16003..815b89ee5 100644 --- a/src/mem/ruby/system/System.cc +++ b/src/mem/ruby/system/System.cc @@ -68,12 +68,12 @@ RubySystem::RubySystem(const Params *p) m_memory_size_bits = p->memory_size_bits; // Resize to the size of different machine types - g_abs_controls.resize(MachineType_NUM); + m_abstract_controls.resize(MachineType_NUM); // Collate the statistics before they are printed. Stats::registerDumpCallback(new RubyStatsCallback(this)); // Create the profiler - m_profiler = new Profiler(p); + m_profiler = new Profiler(p, this); m_phys_mem = p->phys_mem; } @@ -89,7 +89,7 @@ RubySystem::registerAbstractController(AbstractController* cntrl) m_abs_cntrl_vec.push_back(cntrl); MachineID id = cntrl->getMachineID(); - g_abs_controls[id.getType()][id.getNum()] = cntrl; + m_abstract_controls[id.getType()][id.getNum()] = cntrl; } RubySystem::~RubySystem() diff --git a/src/mem/ruby/system/System.hh b/src/mem/ruby/system/System.hh index 57a1b7cfb..fdb5fc881 100644 --- a/src/mem/ruby/system/System.hh +++ b/src/mem/ruby/system/System.hh @@ -45,6 +45,7 @@ #include "sim/clocked_object.hh" class Network; +class AbstractController; class RubySystem : public ClockedObject { @@ -142,6 +143,7 @@ class RubySystem : public ClockedObject public: Profiler* m_profiler; CacheRecorder* m_cache_recorder; + std::vector > m_abstract_controls; }; class RubyStatsCallback : public Callback diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index 24b429b28..437fc539c 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -250,7 +250,6 @@ class $py_ident(RubyController): #include "mem/protocol/TransitionResult.hh" #include "mem/protocol/Types.hh" #include "mem/ruby/common/Consumer.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/slicc_interface/AbstractController.hh" #include "params/$c_ident.hh" ''') @@ -438,7 +437,6 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr); #include "mem/protocol/${ident}_Event.hh" #include "mem/protocol/${ident}_State.hh" #include "mem/protocol/Types.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/system/System.hh" ''') for include_path in includes: @@ -771,9 +769,10 @@ $c_ident::collateStats() for (${ident}_Event event = ${ident}_Event_FIRST; event < ${ident}_Event_NUM; ++event) { for (unsigned int i = 0; i < m_num_controllers; ++i) { + RubySystem *rs = params()->ruby_system; std::map::iterator it = - g_abs_controls[MachineType_${ident}].find(i); - assert(it != g_abs_controls[MachineType_${ident}].end()); + rs->m_abstract_controls[MachineType_${ident}].find(i); + assert(it != rs->m_abstract_controls[MachineType_${ident}].end()); (*eventVec[event])[i] = (($c_ident *)(*it).second)->getEventCount(event); } @@ -786,9 +785,10 @@ $c_ident::collateStats() event < ${ident}_Event_NUM; ++event) { for (unsigned int i = 0; i < m_num_controllers; ++i) { + RubySystem *rs = params()->ruby_system; std::map::iterator it = - g_abs_controls[MachineType_${ident}].find(i); - assert(it != g_abs_controls[MachineType_${ident}].end()); + rs->m_abstract_controls[MachineType_${ident}].find(i); + assert(it != rs->m_abstract_controls[MachineType_${ident}].end()); (*transVec[state][event])[i] = (($c_ident *)(*it).second)->getTransitionCount(state, event); } @@ -1044,7 +1044,6 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt) code(''' #include "mem/protocol/Types.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/system/System.hh" ''') @@ -1120,7 +1119,6 @@ ${ident}_Controller::wakeup() #include "mem/protocol/${ident}_Event.hh" #include "mem/protocol/${ident}_State.hh" #include "mem/protocol/Types.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/system/System.hh" #define HASH_FUN(state, event) ((int(state)*${ident}_Event_NUM)+int(event)) diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py index eb1dead0f..73d6f9c69 100644 --- a/src/mem/slicc/symbols/Type.py +++ b/src/mem/slicc/symbols/Type.py @@ -399,7 +399,6 @@ operator<<(std::ostream& out, const ${{self.c_ident}}& obj) #include #include "mem/protocol/${{self.c_ident}}.hh" -#include "mem/ruby/common/Global.hh" #include "mem/ruby/system/System.hh" using namespace std; -- 2.30.2