From 23a405f5d8f025784bf447f49a3d1e938577ef2b Mon Sep 17 00:00:00 2001 From: Polina Dudnik Date: Wed, 15 Jul 2009 10:46:22 -0500 Subject: Tester update --- src/mem/ruby/common/Driver.hh | 17 +- src/mem/ruby/tester/DetermGETXGenerator.cc | 120 ++++++++++---- src/mem/ruby/tester/DetermGETXGenerator.hh | 92 ++++++---- src/mem/ruby/tester/DetermInvGenerator.cc | 102 +++++++----- src/mem/ruby/tester/DetermInvGenerator.hh | 91 ++++++---- src/mem/ruby/tester/DetermSeriesGETSGenerator.cc | 91 ++++++---- src/mem/ruby/tester/DetermSeriesGETSGenerator.hh | 90 ++++++---- src/mem/ruby/tester/DeterministicDriver.cc | 109 +++++++----- src/mem/ruby/tester/DeterministicDriver.hh | 102 +++++++----- src/mem/ruby/tester/Driver_Tester.cc | 44 ----- src/mem/ruby/tester/Driver_Tester.hh | 82 --------- src/mem/ruby/tester/EventQueue_Tester.hh | 118 ------------- src/mem/ruby/tester/Global_Tester.hh | 74 --------- src/mem/ruby/tester/RaceyDriver.cc | 87 ++++++---- src/mem/ruby/tester/RaceyDriver.hh | 92 ++++++---- src/mem/ruby/tester/RaceyPseudoThread.cc | 67 ++++---- src/mem/ruby/tester/RaceyPseudoThread.hh | 49 +++--- src/mem/ruby/tester/SpecifiedGenerator.cc | 79 ++++++--- src/mem/ruby/tester/SpecifiedGenerator.hh | 88 ++++++---- src/mem/ruby/tester/Tester_Globals.hh | 66 ++++++++ src/mem/ruby/tester/main.cc | 79 ++++++--- src/mem/ruby/tester/main.hh | 84 ++++++---- src/mem/ruby/tester/test_framework.cc | 203 ++++++++++++----------- src/mem/ruby/tester/test_framework.hh | 84 ++++++---- src/mem/rubymem.cc | 4 +- tests/quick/40.m5threads-test-atomic/test.py | 0 26 files changed, 1145 insertions(+), 969 deletions(-) delete mode 100644 src/mem/ruby/tester/Driver_Tester.cc delete mode 100644 src/mem/ruby/tester/Driver_Tester.hh delete mode 100644 src/mem/ruby/tester/EventQueue_Tester.hh delete mode 100644 src/mem/ruby/tester/Global_Tester.hh create mode 100644 src/mem/ruby/tester/Tester_Globals.hh mode change 100644 => 100755 tests/quick/40.m5threads-test-atomic/test.py diff --git a/src/mem/ruby/common/Driver.hh b/src/mem/ruby/common/Driver.hh index 9aa756386..9d17fcadb 100644 --- a/src/mem/ruby/common/Driver.hh +++ b/src/mem/ruby/common/Driver.hh @@ -40,13 +40,8 @@ #include "mem/ruby/common/Global.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/ruby/system/NodeID.hh" -#include "mem/protocol/CacheRequestType.hh" +#include "mem/ruby/common/Address.hh" -class RubySystem; -class SubBlock; -class Address; -class MachineID; -class SimicsHypervisor; class Driver { public: @@ -58,15 +53,12 @@ public: // Public Methods virtual void get_network_config() {} - virtual void dmaHitCallback() = 0; - virtual void hitCallback(NodeID proc, SubBlock& data, CacheRequestType type, int thread) = 0; // Called by sequencer - virtual void conflictCallback(NodeID proc, SubBlock& data, CacheRequestType type, int thread) { assert(0); }; // Called by sequencer + virtual void dmaHitCallback() {}; + virtual void hitCallback(int64_t id) = 0; // Called by sequencer + virtual void go() = 0; virtual integer_t getInstructionCount(int procID) const { return 1; } virtual integer_t getCycleCount(int procID) const { return 1; } virtual void addThreadDependency(int procID, int requestor_thread, int conflict_thread) const { assert(0);} - virtual int inTransaction(int procID, int thread ) const{ - cout << "Driver.hh inTransaction " << endl; -return false; } //called by Sequencer virtual void printDebug(){} //called by Sequencer virtual void printStats(ostream& out) const = 0; @@ -74,7 +66,6 @@ return false; } //called by Sequencer virtual void printConfig(ostream& out) const = 0; - //virtual void abortCallback(NodeID proc){} virtual integer_t readPhysicalMemory(int procID, physical_address_t address, int len ){ ASSERT(0); return 0; } diff --git a/src/mem/ruby/tester/DetermGETXGenerator.cc b/src/mem/ruby/tester/DetermGETXGenerator.cc index 6692fb80c..1eb9cb3ee 100644 --- a/src/mem/ruby/tester/DetermGETXGenerator.cc +++ b/src/mem/ruby/tester/DetermGETXGenerator.cc @@ -1,31 +1,58 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ @@ -38,7 +65,8 @@ #include "mem/ruby/tester/DetermGETXGenerator.hh" #include "mem/protocol/DetermGETXGeneratorStatus.hh" #include "mem/ruby/tester/DeterministicDriver.hh" -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/tester/Tester_Globals.hh" +#include "mem/ruby/common/Global.hh" #include "mem/ruby/tester/SpecifiedGenerator.hh" //#include "DMAController.hh" #include "mem/ruby/libruby.hh" @@ -48,9 +76,11 @@ DetermGETXGenerator::DetermGETXGenerator(NodeID node, DeterministicDriver * driv { m_status = DetermGETXGeneratorStatus_Thinking; m_last_transition = 0; + counter = 0; m_node = node; - m_address = Address(9999); // initialize to null value + m_address = Address(1); // initialize to null value m_counter = 0; + issued_load = false; parent_driver = driver; // don't know exactly when this node needs to request so just guess randomly parent_driver->eventQueue->scheduleEvent(this, 1+(random() % 200)); @@ -68,7 +98,9 @@ void DetermGETXGenerator::wakeup() // determine if this node is next for the GETX round robin request if (m_status == DetermGETXGeneratorStatus_Thinking) { if (parent_driver->isStoreReady(m_node)) { - pickAddress(); + if (!issued_load) { + pickAddress(); + } m_status = DetermGETXGeneratorStatus_Store_Pending; // Store Pending m_last_transition = parent_driver->eventQueue->getTime(); initiateStore(); // GETX @@ -85,13 +117,13 @@ void DetermGETXGenerator::wakeup() void DetermGETXGenerator::performCallback(NodeID proc, Address address) { assert(proc == m_node); - assert(address == m_address); + assert(address == m_address); DEBUG_EXPR(TESTER_COMP, LowPrio, proc); DEBUG_EXPR(TESTER_COMP, LowPrio, m_status); DEBUG_EXPR(TESTER_COMP, LowPrio, address); - if (m_status == DetermGETXGeneratorStatus_Store_Pending) { + if (m_status == DetermGETXGeneratorStatus_Store_Pending) { parent_driver->recordStoreLatency(parent_driver->eventQueue->getTime() - m_last_transition); parent_driver->storeCompleted(m_node, address); // advance the store queue @@ -104,7 +136,7 @@ void DetermGETXGenerator::performCallback(NodeID proc, Address address) parent_driver->reportDone(); m_status = DetermGETXGeneratorStatus_Done; m_last_transition = parent_driver->eventQueue->getTime(); - } + } } else { WARN_EXPR(m_status); @@ -132,7 +164,6 @@ void DetermGETXGenerator::pickAddress() void DetermGETXGenerator::initiateStore() { DEBUG_MSG(TESTER_COMP, MedPrio, "initiating Store"); - uint8_t *write_data = new uint8_t[64]; for(int i=0; i < 64; i++) { write_data[i] = m_node; @@ -141,12 +172,29 @@ void DetermGETXGenerator::initiateStore() char name [] = "Sequencer_"; char port_name [13]; sprintf(port_name, "%s%d", name, m_node); - - int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m_address.getAddress(), write_data, 64, 0, RubyRequestType_ST, RubyAccessMode_Supervisor)); + int64_t request_id; + if (counter%10 == 0) { + if (!issued_load) { + cerr << m_node << " RMW_Read to address: " << m_address.getAddress() << endl << flush; + request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m_address.getAddress(), write_data, 64, 0, RubyRequestType_RMW_Read, RubyAccessMode_Supervisor)); + issued_load = true; + } + else { + cerr << m_node << " RMW_Write to address: " << m_address.getAddress() << endl << flush; + request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m_address.getAddress(), write_data, 64, 0, RubyRequestType_RMW_Write, RubyAccessMode_Supervisor)); + issued_load = false; + counter++; + } + } + else { + cerr << m_node << " ST to address: " << m_address.getAddress() << endl << flush; + request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m_address.getAddress(), write_data, 64, 0, RubyRequestType_ST, RubyAccessMode_Supervisor)); + counter++; + } // delete [] write_data; - ASSERT(parent_driver->requests.find(request_id) == parent_driver->requests.end()); + ASSERT(parent_driver->requests.find(request_id) == parent_driver->requests.end()); parent_driver->requests.insert(make_pair(request_id, make_pair(m_node, m_address))); } diff --git a/src/mem/ruby/tester/DetermGETXGenerator.hh b/src/mem/ruby/tester/DetermGETXGenerator.hh index 82e616e4b..7d7e9ea70 100644 --- a/src/mem/ruby/tester/DetermGETXGenerator.hh +++ b/src/mem/ruby/tester/DetermGETXGenerator.hh @@ -1,36 +1,63 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ * - * Description: + * Description: * */ @@ -40,11 +67,12 @@ #ifndef DETERMGETXGENERATOR_H #define DETERMGETXGENERATOR_H -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/tester/Tester_Globals.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/protocol/DetermGETXGeneratorStatus.hh" -#include "Address_Tester.hh" #include "mem/ruby/tester/SpecifiedGenerator.hh" +#include "mem/ruby/common/Global.hh" +#include "mem/ruby/common/Address.hh" class DeterministicDriver; class DMAController; @@ -56,7 +84,7 @@ public: // Destructor ~DetermGETXGenerator(); - + // Public Methods void wakeup(); void performCallback(NodeID proc, Address address); @@ -80,8 +108,10 @@ private: // Data Members (m_ prefix) DetermGETXGeneratorStatus m_status; int m_counter; + bool issued_load; Address m_address; NodeID m_node; + long int counter; Time m_last_transition; }; @@ -91,7 +121,7 @@ ostream& operator<<(ostream& out, const DetermGETXGenerator& obj); // ******************* Definitions ******************* // Output operator definition -extern inline +extern inline ostream& operator<<(ostream& out, const DetermGETXGenerator& obj) { obj.print(out); diff --git a/src/mem/ruby/tester/DetermInvGenerator.cc b/src/mem/ruby/tester/DetermInvGenerator.cc index eebe18057..73ef8b66a 100644 --- a/src/mem/ruby/tester/DetermInvGenerator.cc +++ b/src/mem/ruby/tester/DetermInvGenerator.cc @@ -1,31 +1,58 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ @@ -36,10 +63,11 @@ // then Invalidates them with a GETX. The GETS and GETX request are generated one // at a time in round-robin fashion 0...1...2...etc. +#include "mem/ruby/common/Global.hh" #include "mem/ruby/tester/DetermInvGenerator.hh" #include "mem/protocol/DetermInvGeneratorStatus.hh" #include "mem/ruby/tester/DeterministicDriver.hh" -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/tester/Tester_Globals.hh" //#include "DMAController.hh" #include "mem/ruby/libruby.hh" @@ -75,7 +103,7 @@ void DetermInvGenerator::wakeup() } else { // I'll check again later m_driver.eventQueue->scheduleEvent(this, thinkTime()); } - } else if (m_status == DetermInvGeneratorStatus_Load_Complete) { + } else if (m_status == DetermInvGeneratorStatus_Load_Complete) { if (m_driver.isStoreReady(m_node, m_address)) { // do a store in this transaction or start the next one if (m_driver.isLoadReady((0), m_address)) { // everyone is in S for this address i.e. back to node 0 m_status = DetermInvGeneratorStatus_Store_Pending; @@ -98,13 +126,13 @@ void DetermInvGenerator::wakeup() void DetermInvGenerator::performCallback(NodeID proc, Address address) { assert(proc == m_node); - assert(address == m_address); + assert(address == m_address); DEBUG_EXPR(TESTER_COMP, LowPrio, proc); DEBUG_EXPR(TESTER_COMP, LowPrio, m_status); DEBUG_EXPR(TESTER_COMP, LowPrio, address); - if (m_status == DetermInvGeneratorStatus_Load_Pending) { + if (m_status == DetermInvGeneratorStatus_Load_Pending) { m_driver.recordLoadLatency(m_driver.eventQueue->getTime() - m_last_transition); //NodeID firstByte = data.readByte(); // dummy read @@ -121,9 +149,9 @@ void DetermInvGenerator::performCallback(NodeID proc, Address address) m_driver.reportDone(); m_status = DetermInvGeneratorStatus_Done; m_last_transition = m_driver.eventQueue->getTime(); - } + } - } else if (m_status == DetermInvGeneratorStatus_Store_Pending) { + } else if (m_status == DetermInvGeneratorStatus_Store_Pending) { m_driver.recordStoreLatency(m_driver.eventQueue->getTime() - m_last_transition); //data.writeByte(m_node); m_driver.storeCompleted(m_node, address); // advance the store queue @@ -137,7 +165,7 @@ void DetermInvGenerator::performCallback(NodeID proc, Address address) m_driver.reportDone(); m_status = DetermInvGeneratorStatus_Done; m_last_transition = m_driver.eventQueue->getTime(); - } + } } else { WARN_EXPR(m_status); ERROR_MSG("Invalid status"); @@ -174,7 +202,7 @@ void DetermInvGenerator::pickLoadAddress() void DetermInvGenerator::initiateLoad() { DEBUG_MSG(TESTER_COMP, MedPrio, "initiating Load"); - // sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_LD, Address(1), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); + // sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_LD, Address(1), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); uint8_t * read_data = new uint8_t[64]; char name [] = "Sequencer_"; @@ -185,7 +213,7 @@ void DetermInvGenerator::initiateLoad() //delete [] read_data; - ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); + ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); m_driver.requests.insert(make_pair(request_id, make_pair(m_node, m_address))); } @@ -193,7 +221,7 @@ void DetermInvGenerator::initiateLoad() void DetermInvGenerator::initiateStore() { DEBUG_MSG(TESTER_COMP, MedPrio, "initiating Store"); - // sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_ST, Address(3), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); + // sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_ST, Address(3), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); uint8_t *write_data = new uint8_t[64]; for(int i=0; i < 64; i++) { write_data[i] = m_node; @@ -207,7 +235,7 @@ void DetermInvGenerator::initiateStore() //delete [] write_data; - ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); + ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); m_driver.requests.insert(make_pair(request_id, make_pair(m_node, m_address))); } diff --git a/src/mem/ruby/tester/DetermInvGenerator.hh b/src/mem/ruby/tester/DetermInvGenerator.hh index 6127c3af4..fc334c0e3 100644 --- a/src/mem/ruby/tester/DetermInvGenerator.hh +++ b/src/mem/ruby/tester/DetermInvGenerator.hh @@ -1,36 +1,63 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ * - * Description: + * Description: * */ @@ -41,8 +68,10 @@ #ifndef DETERMINVGENERATOR_H #define DETERMINVGENERATOR_H -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/tester/Tester_Globals.hh" #include "mem/ruby/common/Consumer.hh" +#include "mem/ruby/common/Address.hh" +#include "mem/ruby/common/Global.hh" #include "mem/protocol/DetermInvGeneratorStatus.hh" #include "Address_Tester.hh" #include "mem/ruby/tester/SpecifiedGenerator.hh" @@ -56,7 +85,7 @@ public: // Destructor ~DetermInvGenerator(); - + // Public Methods void wakeup(); void performCallback(NodeID proc, Address address); @@ -71,7 +100,7 @@ private: void initiateStore(); void pickLoadAddress(); void pickStoreAddress(); - + // copy constructor and assignment operator DetermInvGenerator(const DetermInvGenerator& obj); DetermInvGenerator& operator=(const DetermInvGenerator& obj); @@ -92,7 +121,7 @@ ostream& operator<<(ostream& out, const DetermInvGenerator& obj); // ******************* Definitions ******************* // Output operator definition -extern inline +extern inline ostream& operator<<(ostream& out, const DetermInvGenerator& obj) { obj.print(out); diff --git a/src/mem/ruby/tester/DetermSeriesGETSGenerator.cc b/src/mem/ruby/tester/DetermSeriesGETSGenerator.cc index 38688f10d..47a4eda0d 100644 --- a/src/mem/ruby/tester/DetermSeriesGETSGenerator.cc +++ b/src/mem/ruby/tester/DetermSeriesGETSGenerator.cc @@ -1,31 +1,58 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ @@ -44,7 +71,7 @@ DetermSeriesGETSGenerator::DetermSeriesGETSGenerator(NodeID node, DeterministicD m_node = node; m_address = Address(9999); // initialize to null value m_counter = 0; - + // don't know exactly when this node needs to request so just guess randomly m_driver.eventQueue->scheduleEvent(this, 1+(random() % 200)); @@ -79,13 +106,13 @@ void DetermSeriesGETSGenerator::wakeup() void DetermSeriesGETSGenerator::performCallback(NodeID proc, Address address) { assert(proc == m_node); - assert(address == m_address); + assert(address == m_address); DEBUG_EXPR(TESTER_COMP, LowPrio, proc); DEBUG_EXPR(TESTER_COMP, LowPrio, m_status); DEBUG_EXPR(TESTER_COMP, LowPrio, address); - if (m_status == DetermSeriesGETSGeneratorStatus_Load_Pending) { + if (m_status == DetermSeriesGETSGeneratorStatus_Load_Pending) { m_driver.recordLoadLatency(m_driver.eventQueue->getTime() - m_last_transition); //data.writeByte(m_node); m_driver.loadCompleted(m_node, address); // advance the load queue @@ -100,7 +127,7 @@ void DetermSeriesGETSGenerator::performCallback(NodeID proc, Address address) m_driver.reportDone(); m_status = DetermSeriesGETSGeneratorStatus_Done; m_last_transition = m_driver.eventQueue->getTime(); - } + } } else { WARN_EXPR(m_status); @@ -128,7 +155,7 @@ void DetermSeriesGETSGenerator::pickAddress() void DetermSeriesGETSGenerator::initiateLoad() { DEBUG_MSG(TESTER_COMP, MedPrio, "initiating Load"); - //sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_IFETCH, Address(3), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); + //sequencer()->makeRequest(CacheMsg(m_address, m_address, CacheRequestType_IFETCH, Address(3), AccessModeType_UserMode, 1, PrefetchBit_No, Address(0), 0 /* only 1 SMT thread */)); uint8_t *read_data = new uint8_t[64]; @@ -140,7 +167,7 @@ void DetermSeriesGETSGenerator::initiateLoad() //delete [] read_data; - ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); + ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end()); m_driver.requests.insert(make_pair(request_id, make_pair(m_node, m_address))); } diff --git a/src/mem/ruby/tester/DetermSeriesGETSGenerator.hh b/src/mem/ruby/tester/DetermSeriesGETSGenerator.hh index 225e45a11..e2034bde1 100644 --- a/src/mem/ruby/tester/DetermSeriesGETSGenerator.hh +++ b/src/mem/ruby/tester/DetermSeriesGETSGenerator.hh @@ -1,36 +1,63 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ * - * Description: + * Description: * */ @@ -42,10 +69,11 @@ #ifndef DETERMSERIESGETSGENERATOR_H #define DETERMSERIESGETSGENERATOR_H -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/tester/Tester_Globals.hh" #include "mem/ruby/common/Consumer.hh" +#include "mem/ruby/common/Address.hh" +#include "mem/ruby/common/Global.hh" #include "mem/protocol/DetermSeriesGETSGeneratorStatus.hh" -#include "Address_Tester.hh" #include "mem/ruby/tester/SpecifiedGenerator.hh" class DeterministicDriver; @@ -57,7 +85,7 @@ public: // Destructor ~DetermSeriesGETSGenerator(); - + // Public Methods void wakeup(); void performCallback(NodeID proc, Address address); @@ -89,7 +117,7 @@ ostream& operator<<(ostream& out, const DetermSeriesGETSGenerator& obj); // ******************* Definitions ******************* // Output operator definition -extern inline +extern inline ostream& operator<<(ostream& out, const DetermSeriesGETSGenerator& obj) { obj.print(out); diff --git a/src/mem/ruby/tester/DeterministicDriver.cc b/src/mem/ruby/tester/DeterministicDriver.cc index 54b5f5e0d..b6eb79497 100644 --- a/src/mem/ruby/tester/DeterministicDriver.cc +++ b/src/mem/ruby/tester/DeterministicDriver.cc @@ -1,40 +1,68 @@ /* - * 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. - */ + Copyright (C) 1999-2008 by Mark D. Hill and David A. Wood for the + Wisconsin Multifacet Project. Contact: gems@cs.wisc.edu + http://www.cs.wisc.edu/gems/ + + -------------------------------------------------------------------- + + This file is part of the Ruby Multiprocessor Memory System Simulator, + a component of the Multifacet GEMS (General Execution-driven + Multiprocessor Simulator) software toolset originally developed at + the University of Wisconsin-Madison. + + Ruby was originally developed primarily by Milo Martin and Daniel + Sorin with contributions from Ross Dickson, Carl Mauer, and Manoj + Plakal. + + Substantial further development of Multifacet GEMS at the + University of Wisconsin was performed by Alaa Alameldeen, Brad + Beckmann, Jayaram Bobba, Ross Dickson, Dan Gibson, Pacia Harper, + Derek Hower, Milo Martin, Michael Marty, Carl Mauer, Michelle Moravan, + Kevin Moore, Andrew Phelps, Manoj Plakal, Daniel Sorin, Haris Volos, + Min Xu, and Luke Yen. + -------------------------------------------------------------------- + + If your use of this software contributes to a published paper, we + request that you (1) cite our summary paper that appears on our + website (http://www.cs.wisc.edu/gems/) and (2) e-mail a citation + for your published paper to gems@cs.wisc.edu. + + If you redistribute derivatives of this software, we request that + you notify us and either (1) ask people to register with us at our + website (http://www.cs.wisc.edu/gems/) or (2) collect registration + information and periodically send it to us. + + -------------------------------------------------------------------- + + Multifacet GEMS is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + Multifacet GEMS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the Multifacet GEMS; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA + + The GNU General Public License is contained in the file LICENSE. + +### END HEADER ### +*/ /* * $Id$ * */ -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/common/Global.hh" +#include "mem/ruby/tester/Tester_Globals.hh" #include "mem/ruby/tester/DeterministicDriver.hh" -#include "mem/ruby/tester/EventQueue_Tester.hh" +#include "mem/ruby/eventqueue/RubyEventQueue.hh" //#include "DMAGenerator.hh" #include "mem/ruby/tester/DetermGETXGenerator.hh" @@ -42,20 +70,19 @@ DeterministicDriver::DeterministicDriver(string generator_type, int num_completions, int num_procs, Time g_think_time, Time g_wait_time, int g_tester_length) { - eventQueue = new RubyEventQueue; + eventQueue = new RubyEventQueue; m_finish_time = 0; m_last_issue = -11; m_done_counter = 0; m_loads_completed = 0; m_stores_completed = 0; - + m_numCompletionsPerNode = num_completions; m_num_procs = num_procs; m_think_time = g_think_time; m_wait_time = g_wait_time; m_tester_length = g_tester_length; - - + m_last_progress_vector.setSize(num_procs); for (int i=0; iperformCallback(proc, address); - + m_last_progress_vector[proc] = eventQueue->getTime(); requests.erase(request_id); @@ -153,7 +180,7 @@ bool DeterministicDriver::isLoadReady(NodeID node) } bool DeterministicDriver::isLoadReady(NodeID node, Address addr) -{ +{ return isAddrReady(node, m_load_vector, addr); } @@ -163,7 +190,7 @@ bool DeterministicDriver::isAddrReady(NodeID node, Vector addr_vector) for (int i=0; i= m_numCompletionsPerNode*node) && // is this node next - (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests + (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests return true; } } @@ -180,7 +207,7 @@ bool DeterministicDriver::isAddrReady(NodeID node, Vector addr_vector, A if (((addr_vector[addr_number]+1)%m_num_procs == node) && (m_loads_completed+m_stores_completed >= m_numCompletionsPerNode*node) && // is this node next - (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests + (eventQueue->getTime() >= m_last_issue + 10)) { // controll rate of requests return true; } else { return false; @@ -203,7 +230,7 @@ void DeterministicDriver::setNextAddr(NodeID node, Address addr, Vector& { // mark the addr vector that this proc was the last to use the particular address int addr_number = addr.getAddress()/DATA_BLOCK_BYTES; - addr_vector[addr_number] = node; + addr_vector[addr_number] = node; } Address DeterministicDriver::getNextLoadAddr(NodeID node) @@ -221,16 +248,18 @@ Address DeterministicDriver::getNextAddr(NodeID node, Vector addr_vector // This method deterministically picks the next addr the node should acquirer // The addrs cycle through according to NodeID 0->1->...->lastID->0... - + Address addr; - + // should only be called if we know a addr is ready for the node ASSERT(isAddrReady(node, addr_vector)); for (int addr_number=0; addr_number -#include "mem/ruby/tester/Global_Tester.hh" +#include "mem/ruby/common/Global.hh" +#include "mem/ruby/tester/Tester_Globals.hh" #include "mem/ruby/common/Histogram.hh" // includes global, but doesn't use anything, so it should be fine #include "mem/protocol/CacheRequestType.hh" // includes global, but doesn't use anything, so it should be fine -#include "Address_Tester.hh" // we redefined the address +#include "mem/ruby/common/Address.hh" // we redefined the address #include "mem/ruby/tester/DetermGETXGenerator.hh" // this is our file #include "mem/ruby/tester/DetermSeriesGETSGenerator.hh" // this is our file #include "mem/ruby/tester/DetermInvGenerator.hh" // this is our file #include "mem/ruby/libruby.hh" -#include "mem/ruby/tester/Driver_Tester.hh" +#include "mem/ruby/common/Driver.hh" #include "mem/ruby/common/Consumer.hh" -#include "mem/ruby/tester/EventQueue_Tester.hh" +#include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "mem/protocol/SpecifiedGeneratorType.hh" //class DMAGenerator; -class DeterministicDriver : public Driver_Tester, public Consumer { +class DeterministicDriver : public Driver, public Consumer { public: friend class DetermGETXGenerator; friend class DetermSeriesGETSGenerator; @@ -62,7 +90,7 @@ public: // Destructor ~DeterministicDriver(); - + // Public Methods void go(); bool isStoreReady(NodeID node); @@ -100,7 +128,7 @@ private: bool isAddrReady(NodeID node, Vector addr_vector, Address addr); void setNextAddr(NodeID node, Address addr, Vector& addr_vector); - + // Data Members (m_ prefix) Vector