Tester update
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)));
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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; i<m_last_progress_vector.size(); i++) {
|
||||
m_last_progress_vector[i] = 0;
|
||||
@@ -129,7 +156,7 @@ void DeterministicDriver::hitCallback(int64_t request_id)
|
||||
Address address = requests[request_id].second;
|
||||
|
||||
m_generator_vector[proc]->performCallback(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<NodeID> addr_vector)
|
||||
for (int i=0; i<addr_vector.size(); i++) {
|
||||
if (((addr_vector[i]+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;
|
||||
}
|
||||
}
|
||||
@@ -180,7 +207,7 @@ bool DeterministicDriver::isAddrReady(NodeID node, Vector<NodeID> 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<NodeID>&
|
||||
{
|
||||
// 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<NodeID> 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<addr_vector.size(); addr_number++) {
|
||||
|
||||
// is this node next in line for the addr
|
||||
if ((addr_vector[addr_number] != 1) && ((addr_vector[addr_number]+1)%m_num_procs) == node) {
|
||||
// POLINA: LOOK HERE!
|
||||
// if ((addr_vector[addr_number] != 1) && ((addr_vector[addr_number]+1)%m_num_procs) == node) {
|
||||
if (((addr_vector[addr_number]+1)%m_num_procs) == node) {
|
||||
|
||||
// One addr per cache line
|
||||
addr.setAddress(addr_number * DATA_BLOCK_BYTES);
|
||||
|
||||
@@ -1,58 +1,86 @@
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DETERMINISTICDRIVER_H
|
||||
#define DETERMINISTICDRIVER_H
|
||||
#include <map>
|
||||
#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<NodeID> addr_vector, Address addr);
|
||||
void setNextAddr(NodeID node, Address addr, Vector<NodeID>& addr_vector);
|
||||
|
||||
|
||||
|
||||
// Data Members (m_ prefix)
|
||||
Vector<Time> m_last_progress_vector;
|
||||
Vector<SpecifiedGenerator*> m_generator_vector;
|
||||
@@ -114,14 +142,14 @@ private:
|
||||
int m_stores_completed;
|
||||
// enforces the previous node to have a certain # of completions
|
||||
// before next node starts
|
||||
|
||||
|
||||
map <int64_t, pair <int, Address> > requests;
|
||||
Time m_think_time;
|
||||
Time m_wait_time;
|
||||
int m_tester_length;
|
||||
int m_num_procs;
|
||||
RubyEventQueue * eventQueue;
|
||||
int m_numCompletionsPerNode;
|
||||
int m_numCompletionsPerNode;
|
||||
|
||||
Histogram m_load_latency;
|
||||
Histogram m_store_latency;
|
||||
@@ -135,7 +163,7 @@ ostream& operator<<(ostream& out, const DeterministicDriver& obj);
|
||||
// ******************* Definitions *******************
|
||||
|
||||
// Output operator definition
|
||||
extern inline
|
||||
extern inline
|
||||
ostream& operator<<(ostream& out, const DeterministicDriver& obj)
|
||||
{
|
||||
obj.print(out);
|
||||
|
||||
@@ -1,44 +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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Description: See Driver_Tester.hh
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mem/ruby/tester/Driver_Tester.hh"
|
||||
|
||||
Driver_Tester::Driver_Tester() {
|
||||
}
|
||||
|
||||
// still need to be defined for subclasses
|
||||
Driver_Tester::~Driver_Tester() {
|
||||
}
|
||||
@@ -1,82 +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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef Driver_Tester_H
|
||||
#define Driver_Tester_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/ruby/common/Consumer.hh"
|
||||
#include "mem/ruby/system/NodeID.hh"
|
||||
#include "Address_Tester.hh"
|
||||
|
||||
class Driver_Tester {
|
||||
public:
|
||||
// Constructors
|
||||
Driver_Tester();
|
||||
|
||||
// Destructor
|
||||
virtual ~Driver_Tester() = 0;
|
||||
|
||||
// Public Methods
|
||||
virtual void get_network_config() {}
|
||||
virtual void dmaHitCallback() {};
|
||||
virtual void hitCallback(int64_t id) = 0;
|
||||
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 void printDebug(){}
|
||||
|
||||
virtual void printStats(ostream& out) const = 0;
|
||||
virtual void clearStats() = 0;
|
||||
|
||||
virtual void printConfig(ostream& out) const = 0;
|
||||
|
||||
virtual integer_t readPhysicalMemory(int procID, physical_address_t address,
|
||||
int len ){ ASSERT(0); return 0; }
|
||||
|
||||
virtual void writePhysicalMemory( int procID, physical_address_t address,
|
||||
integer_t value, int len ){ ASSERT(0); }
|
||||
|
||||
protected:
|
||||
// accessible by subclasses
|
||||
|
||||
private:
|
||||
// inaccessible by subclasses
|
||||
|
||||
};
|
||||
|
||||
#endif //Driver_Tester_H
|
||||
@@ -1,118 +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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Description: The RubyEventQueue class implements an event queue which
|
||||
* can be trigger events, allowing our simulation to be event driven.
|
||||
*
|
||||
* Currently, the only event we support is a Consumer being signaled
|
||||
* by calling the consumer's wakeup() routine. Adding the event to
|
||||
* the queue does not require a virtual function call, though calling
|
||||
* wakeup() is a virtual function call.
|
||||
*
|
||||
* The method triggerEvents() is called with a global time. All
|
||||
* events which are before or at this time are triggered in timestamp
|
||||
* order. No ordering is enforced for events scheduled to occur at
|
||||
* the same time. Events scheduled to wakeup the same consumer at the
|
||||
* same time are combined into a single event.
|
||||
*
|
||||
* The method scheduleConsumerWakeup() is called with a global time
|
||||
* and a consumer pointer. The event queue will call the wakeup()
|
||||
* method of the consumer at the appropriate time.
|
||||
*
|
||||
* This implementation of RubyEventQueue uses a dynamically sized array
|
||||
* managed as a heap. The algorithms used has O(lg n) for insert and
|
||||
* O(lg n) for extract minimum element. (Based on chapter 7 of Cormen,
|
||||
* Leiserson, and Rivest.) The array is dynamically sized and is
|
||||
* automatically doubled in size when necessary.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef EVENTQUEUE_H
|
||||
#define EVENTQUEUE_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/gems_common/Vector.hh"
|
||||
|
||||
class Consumer;
|
||||
template <class TYPE> class PrioHeap;
|
||||
class RubyEventQueueNode;
|
||||
|
||||
class RubyEventQueue {
|
||||
public:
|
||||
// Constructors
|
||||
RubyEventQueue();
|
||||
|
||||
// Destructor
|
||||
~RubyEventQueue();
|
||||
|
||||
// Public Methods
|
||||
|
||||
Time getTime() const { return m_globalTime; }
|
||||
void scheduleEvent(Consumer* consumer, Time timeDelta) { scheduleEventAbsolute(consumer, timeDelta + m_globalTime); }
|
||||
void scheduleEventAbsolute(Consumer* consumer, Time timeAbs);
|
||||
void triggerEvents(Time t); // called to handle all events <= time t
|
||||
void triggerAllEvents();
|
||||
void print(ostream& out) const;
|
||||
bool isEmpty() const;
|
||||
|
||||
Time getTimeOfLastRecovery() {return m_timeOfLastRecovery;}
|
||||
void setTimeOfLastRecovery(Time t) {m_timeOfLastRecovery = t;}
|
||||
|
||||
// Private Methods
|
||||
private:
|
||||
// Private copy constructor and assignment operator
|
||||
void init();
|
||||
RubyEventQueue(const RubyEventQueue& obj);
|
||||
RubyEventQueue& operator=(const RubyEventQueue& obj);
|
||||
|
||||
// Data Members (m_ prefix)
|
||||
PrioHeap<RubyEventQueueNode>* m_prio_heap_ptr;
|
||||
Time m_globalTime;
|
||||
Time m_timeOfLastRecovery;
|
||||
};
|
||||
|
||||
// Output operator declaration
|
||||
inline extern
|
||||
ostream& operator<<(ostream& out, const RubyEventQueue& obj);
|
||||
|
||||
// ******************* Definitions *******************
|
||||
|
||||
// Output operator definition
|
||||
inline extern
|
||||
ostream& operator<<(ostream& out, const RubyEventQueue& obj)
|
||||
{
|
||||
obj.print(out);
|
||||
out << flush;
|
||||
return out;
|
||||
}
|
||||
|
||||
#endif //EVENTQUEUE_H
|
||||
@@ -1,74 +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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* */
|
||||
|
||||
#ifndef GLOBAL_H
|
||||
#define GLOBAL_H
|
||||
|
||||
typedef unsigned char uint8;
|
||||
typedef unsigned int uint32;
|
||||
typedef unsigned long long uint64;
|
||||
|
||||
typedef signed char int8;
|
||||
typedef int int32;
|
||||
typedef long long int64;
|
||||
|
||||
typedef long long integer_t;
|
||||
typedef unsigned long long uinteger_t;
|
||||
|
||||
typedef int64 Time;
|
||||
typedef uint64 physical_address_t;
|
||||
typedef uint64 la_t;
|
||||
typedef uint64 pa_t;
|
||||
typedef integer_t simtime_t;
|
||||
typedef int NodeID;
|
||||
|
||||
#include "mem/ruby/common/TypeDefines.hh"
|
||||
#include "mem/gems_common/std-includes.hh"
|
||||
#include "Debug_Tester.hh"
|
||||
|
||||
// simple type declarations
|
||||
typedef Time LogicalTime;
|
||||
typedef int64 Index; // what the address bit ripper returns
|
||||
typedef int word; // one word of a cache line
|
||||
typedef unsigned int uint;
|
||||
typedef int SwitchID;
|
||||
typedef int LinkID;
|
||||
|
||||
|
||||
class Debug;
|
||||
extern Debug * debug_ptr;
|
||||
class RubyEventQueue;
|
||||
extern RubyEventQueue * eventQueue;
|
||||
#endif //GLOBAL_H
|
||||
|
||||
@@ -1,40 +1,67 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2005 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-2005 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, Ross Dickson, Pacia Harper, Milo Martin, Michael Marty,
|
||||
Carl Mauer, Kevin Moore, Manoj Plakal, Daniel Sorin, 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/RaceyDriver.hh"
|
||||
#include "mem/ruby/tester/EventQueue_Tester.hh"
|
||||
#include "mem/ruby/eventqueue/RubyEventQueue.hh"
|
||||
#include "mem/ruby/tester/RaceyPseudoThread.hh"
|
||||
|
||||
RaceyDriver::RaceyDriver(int num_procs, int tester_length)
|
||||
@@ -83,7 +110,7 @@ void RaceyDriver::hitCallback(int64_t request_id)
|
||||
uint8_t * data = new uint8_t[4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
data[i] = requests[request_id].second.data[i];
|
||||
}
|
||||
}
|
||||
requests[request_id].second.data;
|
||||
m_racey_pseudo_threads[proc]->performCallback(proc, address, data);
|
||||
requests.erase(request_id);
|
||||
|
||||
@@ -1,31 +1,58 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2005 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-2005 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, Ross Dickson, Pacia Harper, Milo Martin, Michael Marty,
|
||||
Carl Mauer, Kevin Moore, Manoj Plakal, Daniel Sorin, 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,8 +65,9 @@
|
||||
#ifndef RACEYDRIVER_H
|
||||
#define RACEYDRIVER_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/ruby/tester/Driver_Tester.hh"
|
||||
#include "mem/ruby/common/Global.hh"
|
||||
#include "mem/ruby/tester/Tester_Globals.hh"
|
||||
#include "mem/ruby/common/Driver.hh"
|
||||
#include "mem/ruby/tester/RaceyPseudoThread.hh"
|
||||
#include <map>
|
||||
#include "mem/ruby/libruby.hh"
|
||||
@@ -52,7 +80,7 @@ struct address_data {
|
||||
uint8_t * data;
|
||||
};
|
||||
|
||||
class RaceyDriver : public Driver_Tester, public Consumer {
|
||||
class RaceyDriver : public Driver, public Consumer {
|
||||
public:
|
||||
friend class RaceyPseudoThread;
|
||||
// Constructors
|
||||
@@ -92,13 +120,13 @@ public:
|
||||
}
|
||||
|
||||
void print(ostream& out) const;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private copy constructor and assignment operator
|
||||
RaceyDriver(const RaceyDriver& obj);
|
||||
RaceyDriver& operator=(const RaceyDriver& obj);
|
||||
|
||||
|
||||
// Data Members (m_ prefix)
|
||||
Vector<RaceyPseudoThread*> m_racey_pseudo_threads;
|
||||
int m_done_counter;
|
||||
@@ -116,7 +144,7 @@ ostream& operator<<(ostream& out, const RaceyDriver& obj);
|
||||
// ******************* Definitions *******************
|
||||
|
||||
// Output operator definition
|
||||
extern inline
|
||||
extern inline
|
||||
ostream& operator<<(ostream& out, const RaceyDriver& obj)
|
||||
{
|
||||
obj.print(out);
|
||||
|
||||
@@ -1,33 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 1999 Mark D. Hill and David A. Wood
|
||||
* All rights reserved.
|
||||
* Copyright (c) 1999 by Mark Hill and David Wood for the Wisconsin
|
||||
* Multifacet Project. 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.
|
||||
* ##HEADER##
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
* This software is furnished under a license and may be used and
|
||||
* copied only in accordance with the terms of such license and the
|
||||
* inclusion of the above copyright notice. This software or any
|
||||
* other copies thereof or any derivative works may not be provided or
|
||||
* otherwise made available to any other persons. Title to and
|
||||
* ownership of the software is retained by Mark Hill and David Wood.
|
||||
* Any use of this software must include the above copyright notice.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS". THE LICENSOR MAKES NO
|
||||
* WARRANTIES ABOUT ITS CORRECTNESS OR PERFORMANCE.
|
||||
* */
|
||||
|
||||
/*
|
||||
* Description: see RaceyPseudoThread.hh
|
||||
* Description: see RaceyPseudoThread.h
|
||||
*/
|
||||
|
||||
#include "mem/ruby/tester/RaceyPseudoThread.hh"
|
||||
@@ -225,18 +215,18 @@ void RaceyPseudoThread::load_sig(unsigned index) {
|
||||
|
||||
// pc is zero, problem?
|
||||
int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), read_data, 4, 0, RubyRequestType_LD, RubyAccessMode_User));
|
||||
|
||||
|
||||
ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end());
|
||||
|
||||
struct address_data request_data;
|
||||
request_data.address = Address(sig(index));
|
||||
request_data.data = read_data;
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
|
||||
|
||||
/*sequencer()->makeRequest(CacheMsg(Address(sig(index)), Address(sig(index)), CacheRequestType_LD,
|
||||
Address(physical_address_t(1)),
|
||||
AccessModeType_UserMode, 4,
|
||||
PrefetchBit_No, 0, Address(0),
|
||||
PrefetchBit_No, 0, Address(0),
|
||||
0, 0 , false)); */
|
||||
}
|
||||
|
||||
@@ -252,18 +242,18 @@ void RaceyPseudoThread::load_m(unsigned index) {
|
||||
|
||||
// pc is zero, problem?
|
||||
int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), read_data, 4, 0, RubyRequestType_LD, RubyAccessMode_User));
|
||||
|
||||
|
||||
ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end());
|
||||
|
||||
struct address_data request_data;
|
||||
request_data.address = Address(m(index));
|
||||
request_data.data = read_data;
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
|
||||
|
||||
/*sequencer()->makeRequest(CacheMsg(Address(m(index)), Address(m(index)), CacheRequestType_LD,
|
||||
Address(physical_address_t(1)),
|
||||
AccessModeType_UserMode, 4,
|
||||
PrefetchBit_No, 0, Address(0),
|
||||
PrefetchBit_No, 0, Address(0),
|
||||
0, 0, false)); */
|
||||
}
|
||||
|
||||
@@ -273,6 +263,8 @@ void RaceyPseudoThread::store_sig(unsigned index, unsigned value) {
|
||||
m_read = false;
|
||||
m_value = value;
|
||||
uint8_t * write_data = new uint8_t[4];
|
||||
uint8_t * read_data = new uint8_t[4];
|
||||
|
||||
|
||||
memcpy(write_data, &value, 4);
|
||||
|
||||
@@ -282,13 +274,15 @@ void RaceyPseudoThread::store_sig(unsigned index, unsigned value) {
|
||||
|
||||
// pc is zero, problem?
|
||||
int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), write_data, 4, 0, RubyRequestType_ST, RubyAccessMode_User));
|
||||
|
||||
//int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), read_data, 4, 0, RubyRequestType_RMW_Read, RubyAccessMode_User));
|
||||
//int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(sig(index), write_data, 4, 0, RubyRequestType_RMW_Write, RubyAccessMode_User));
|
||||
|
||||
ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end());
|
||||
|
||||
struct address_data request_data;
|
||||
request_data.address = Address(sig(index));
|
||||
request_data.data = write_data;
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
|
||||
/*sequencer()->makeRequest(CacheMsg(Address(sig(index)), Address(sig(index)), CacheRequestType_ST,
|
||||
Address(physical_address_t(1)),
|
||||
@@ -303,6 +297,7 @@ void RaceyPseudoThread::store_m(unsigned index, unsigned value) {
|
||||
m_read = false;
|
||||
m_value = value;
|
||||
uint8_t * write_data = new uint8_t[4];
|
||||
uint8_t * read_data = new uint8_t[4];
|
||||
memcpy(write_data, &value, 4);
|
||||
|
||||
char name [] = "Sequencer_";
|
||||
@@ -311,13 +306,15 @@ void RaceyPseudoThread::store_m(unsigned index, unsigned value) {
|
||||
|
||||
// pc is zero, problem?
|
||||
int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), write_data, 4, 0, RubyRequestType_ST, RubyAccessMode_User));
|
||||
|
||||
//int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), read_data, 4, 0, RubyRequestType_RMW_Read, RubyAccessMode_User));
|
||||
//int64_t request_id = libruby_issue_request(libruby_get_port_by_name(port_name), RubyRequest(m(index), write_data, 4, 0, RubyRequestType_RMW_Write, RubyAccessMode_User));
|
||||
|
||||
ASSERT(m_driver.requests.find(request_id) == m_driver.requests.end());
|
||||
|
||||
struct address_data request_data;
|
||||
request_data.address = Address(m(index));
|
||||
request_data.data = write_data;
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
m_driver.requests.insert(make_pair(request_id, make_pair(m_proc_id, request_data)));
|
||||
|
||||
/*sequencer()->makeRequest(CacheMsg(Address(m(index)), Address(m(index)), CacheRequestType_ST,
|
||||
Address(physical_address_t(1)),
|
||||
|
||||
@@ -1,30 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 1999 Mark D. Hill and David A. Wood
|
||||
* All rights reserved.
|
||||
* Copyright (c) 1999 by Mark Hill and David Wood for the Wisconsin
|
||||
* Multifacet Project. 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.
|
||||
* ##HEADER##
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
* This software is furnished under a license and may be used and
|
||||
* copied only in accordance with the terms of such license and the
|
||||
* inclusion of the above copyright notice. This software or any
|
||||
* other copies thereof or any derivative works may not be provided or
|
||||
* otherwise made available to any other persons. Title to and
|
||||
* ownership of the software is retained by Mark Hill and David Wood.
|
||||
* Any use of this software must include the above copyright notice.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS". THE LICENSOR MAKES NO
|
||||
* WARRANTIES ABOUT ITS CORRECTNESS OR PERFORMANCE.
|
||||
* */
|
||||
|
||||
/*
|
||||
* Description: This implements a pseudo racey thread which drives ruby timing
|
||||
@@ -35,10 +25,11 @@
|
||||
#ifndef RACEYPSEUDOTHREAD_H
|
||||
#define RACEYPSEUDOTHREAD_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/ruby/common/Global.hh"
|
||||
#include "mem/ruby/tester/Tester_Globals.hh"
|
||||
#include "mem/ruby/common/Consumer.hh"
|
||||
#include "mem/ruby/system/NodeID.hh"
|
||||
#include "Address_Tester.hh"
|
||||
#include "mem/ruby/common/Address.hh"
|
||||
#include "mem/ruby/libruby.hh"
|
||||
|
||||
class RaceyDriver;
|
||||
@@ -69,7 +60,7 @@ public:
|
||||
|
||||
// Destructor
|
||||
~RaceyPseudoThread();
|
||||
|
||||
|
||||
// Public Methods
|
||||
void performCallback(int proc, Address address, uint8_t * data);
|
||||
|
||||
@@ -106,7 +97,7 @@ private:
|
||||
// Private copy constructor and assignment operator
|
||||
RaceyPseudoThread(const RaceyPseudoThread& obj);
|
||||
RaceyPseudoThread& operator=(const RaceyPseudoThread& obj);
|
||||
|
||||
|
||||
// Data Members (m_ prefix)
|
||||
RaceyDriver& m_driver;
|
||||
NodeID m_proc_id;
|
||||
@@ -139,7 +130,7 @@ ostream& operator<<(ostream& out, const RaceyPseudoThread& obj);
|
||||
// ******************* Definitions *******************
|
||||
|
||||
// Output operator definition
|
||||
extern inline
|
||||
extern inline
|
||||
ostream& operator<<(ostream& out, const RaceyPseudoThread& obj)
|
||||
{
|
||||
obj.print(out);
|
||||
|
||||
@@ -1,31 +1,58 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2005 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-2005 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, Ross Dickson, Pacia Harper, Milo Martin, Michael Marty,
|
||||
Carl Mauer, Kevin Moore, Manoj Plakal, Daniel Sorin, 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$
|
||||
|
||||
@@ -1,46 +1,74 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2005 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-2005 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, Ross Dickson, Pacia Harper, Milo Martin, Michael Marty,
|
||||
Carl Mauer, Kevin Moore, Manoj Plakal, Daniel Sorin, 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:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SPECIFIEDGENERATOR_H
|
||||
#define SPECIFIEDGENERATOR_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/ruby/common/Global.hh"
|
||||
#include "mem/ruby/tester/Tester_Globals.hh"
|
||||
#include "mem/ruby/common/Consumer.hh"
|
||||
#include "mem/ruby/system/NodeID.hh"
|
||||
#include "Address_Tester.hh"
|
||||
#include "mem/ruby/common/Address.hh"
|
||||
|
||||
class SpecifiedGenerator : public Consumer {
|
||||
public:
|
||||
@@ -49,7 +77,7 @@ public:
|
||||
|
||||
// Destructor
|
||||
virtual ~SpecifiedGenerator() = 0;
|
||||
|
||||
|
||||
// Public Methods
|
||||
virtual void wakeup() = 0;
|
||||
virtual void performCallback(NodeID proc, Address address) = 0;
|
||||
|
||||
66
src/mem/ruby/tester/Tester_Globals.hh
Normal file
66
src/mem/ruby/tester/Tester_Globals.hh
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
/*
|
||||
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/eventqueue/RubyEventQueue.hh"
|
||||
|
||||
class RubyEventQueue;
|
||||
extern RubyEventQueue * eventQueue;
|
||||
|
||||
@@ -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$
|
||||
|
||||
@@ -1,42 +1,70 @@
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
#include "Global_Tester.hh"
|
||||
#include "mem/ruby/common/Global.hh"
|
||||
#include "mem/ruby/tester/Tester_Globals.hh"
|
||||
|
||||
#endif //MAIN_H
|
||||
|
||||
@@ -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$
|
||||
@@ -39,7 +66,9 @@ using namespace std;
|
||||
#include "getopt.hh"
|
||||
#include "mem/ruby/tester/DeterministicDriver.hh"
|
||||
#include "mem/ruby/tester/RaceyDriver.hh"
|
||||
#include "mem/ruby/tester/Driver_Tester.hh"
|
||||
#include "mem/ruby/common/Driver.hh"
|
||||
#include "mem/ruby/recorder/Tracer.hh"
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
@@ -53,37 +82,37 @@ using namespace std;
|
||||
#include "mem/ruby/libruby.hh"
|
||||
|
||||
// FIXME: should really make this a class if can't figure out how to make a function to get the ruby parameter
|
||||
|
||||
|
||||
static void set_defaults();
|
||||
static void parseOptions(int argc, char **argv);
|
||||
static void usageInstructions();
|
||||
static void checkArg(char ch);
|
||||
static void tester_initialize(int argc, char **argv);
|
||||
static void tester_playback_trace();
|
||||
static void tester_destroy();
|
||||
static void hit_callback(int64_t request_id);
|
||||
|
||||
// Tester variables
|
||||
string driver_type;
|
||||
string generator_type;
|
||||
Driver_Tester * m_driver_ptr;
|
||||
Driver * m_driver_ptr;
|
||||
int g_tester_length;
|
||||
int num_completions;
|
||||
Time g_think_time;
|
||||
Time g_wait_time;
|
||||
int num_procs;
|
||||
|
||||
// Debugger variables
|
||||
Debug * debug_ptr;
|
||||
string g_debug_verbosity_string;
|
||||
string g_debug_filter_string;
|
||||
string g_debug_output_filename;
|
||||
Time g_debug_start_time;
|
||||
|
||||
static string trace_filename;
|
||||
bool replaying;
|
||||
|
||||
void tester_main(int argc, char **argv)
|
||||
{
|
||||
tester_initialize(argc, argv);
|
||||
|
||||
if (trace_filename != "") {
|
||||
// playback a trace (for multicast-mask prediction)
|
||||
replaying = true;
|
||||
tester_playback_trace();
|
||||
}
|
||||
|
||||
|
||||
tester_destroy();
|
||||
}
|
||||
@@ -117,7 +146,7 @@ vector<string> getPorts(const char* cfg_script, int cfg_script_argc, char* cfg_s
|
||||
perror("Error Creating Pipe");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
pid = fork();
|
||||
if (pid == -1){
|
||||
perror("Error forking");
|
||||
@@ -139,7 +168,7 @@ vector<string> getPorts(const char* cfg_script, int cfg_script_argc, char* cfg_s
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
} else {
|
||||
close(fd[1]);
|
||||
close(fd[1]);
|
||||
|
||||
int child_status;
|
||||
if (wait(&child_status) == -1) {
|
||||
@@ -149,12 +178,12 @@ vector<string> getPorts(const char* cfg_script, int cfg_script_argc, char* cfg_s
|
||||
if (child_status != EXIT_SUCCESS) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
char buf[100];
|
||||
int bytes_read;
|
||||
while( (bytes_read = read(fd[0], buf, 100)) > 0 ) {
|
||||
for (int i=0;i<bytes_read;i++) {
|
||||
cfg_output << buf[i];
|
||||
cfg_output << buf[i];
|
||||
}
|
||||
}
|
||||
assert(bytes_read == 0);
|
||||
@@ -183,12 +212,7 @@ void tester_initialize(int argc, char **argv)
|
||||
|
||||
for (vector<string>::const_iterator it = port_names.begin(); it != port_names.end(); it++)
|
||||
ports.push_back(libruby_get_port((*it).c_str(), hit_callback));
|
||||
|
||||
debug_ptr = new Debug( g_debug_filter_string.c_str(),
|
||||
g_debug_verbosity_string.c_str(),
|
||||
g_debug_start_time,
|
||||
g_debug_output_filename.c_str() );
|
||||
|
||||
|
||||
if (driver_type == "Deterministic") {
|
||||
m_driver_ptr = new DeterministicDriver(generator_type, num_completions, num_procs, g_think_time, g_wait_time, g_tester_length);
|
||||
}
|
||||
@@ -200,7 +224,22 @@ void tester_initialize(int argc, char **argv)
|
||||
}
|
||||
}*/
|
||||
|
||||
m_driver_ptr->go();
|
||||
if (trace_filename == "") {
|
||||
m_driver_ptr->go();
|
||||
}
|
||||
}
|
||||
|
||||
void tester_playback_trace()
|
||||
{
|
||||
replaying = true;
|
||||
assert(trace_filename != "");
|
||||
cout << "Reading trace from file '" << trace_filename << "'..." << endl;
|
||||
Tracer * replayer = new Tracer("noname");
|
||||
int read = replayer->playbackTrace(trace_filename);
|
||||
cout << "(" << read << " requests read)" << endl;
|
||||
if (read == 0) {
|
||||
ERROR_MSG("Zero items read from tracefile.");
|
||||
}
|
||||
}
|
||||
|
||||
void tester_destroy()
|
||||
@@ -213,7 +252,9 @@ void tester_destroy()
|
||||
|
||||
void hit_callback(int64_t request_id)
|
||||
{
|
||||
m_driver_ptr->hitCallback(request_id);
|
||||
if (!replaying) {
|
||||
m_driver_ptr->hitCallback(request_id);
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************
|
||||
@@ -227,36 +268,31 @@ static struct option const long_options[] =
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"number of processors", required_argument, NULL, 'p'},
|
||||
{"test run length", required_argument, NULL, 'l'},
|
||||
{"debugger verbosity", required_argument, NULL, 'v'},
|
||||
{"debugger filter component", required_argument, NULL, 'c'},
|
||||
{"debugger output file", required_argument, NULL, 'o'},
|
||||
{"debugger start time", required_argument, NULL, 's'},
|
||||
{"generator think time", required_argument, NULL, 'k'},
|
||||
{"generator wait time", required_argument, NULL, 'w'},
|
||||
{"driver type", required_argument, NULL, 'd'},
|
||||
{"generator type", required_argument, NULL, 'g'},
|
||||
{"num completions before pass", required_argument, NULL, 'n'},
|
||||
{"test tracer", required_argument, NULL, 'z'},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
|
||||
// This is awkward and temporary, need the defaults config, and also need functions to
|
||||
// just lookup a parameter in the configuration file
|
||||
// Ideally the default values are set by libruby_init and then a function is provided to
|
||||
// Ideally the default values are set by libruby_init and then a function is provided to
|
||||
// set values at run-time
|
||||
static void set_defaults() {
|
||||
replaying = false;
|
||||
g_tester_length = 0;
|
||||
g_think_time = 5;
|
||||
g_wait_time = 20;
|
||||
|
||||
g_think_time = 10;
|
||||
g_wait_time = 10;
|
||||
|
||||
num_procs = 1;
|
||||
trace_filename = "";
|
||||
num_completions = 1;
|
||||
driver_type = "Deterministic";
|
||||
generator_type = "DetermInvGenerator";
|
||||
g_debug_verbosity_string = "none";
|
||||
g_debug_filter_string = "none";
|
||||
g_debug_output_filename = "none";
|
||||
g_debug_start_time = 0;
|
||||
generator_type = "DetermSeriesGETSGenerator";
|
||||
}
|
||||
|
||||
static void parseOptions(int argc, char **argv)
|
||||
@@ -289,15 +325,6 @@ static void parseOptions(int argc, char **argv)
|
||||
cout << " number of processors = " << optarg << endl;
|
||||
num_procs = atoi( optarg );
|
||||
break;
|
||||
case 'v':
|
||||
checkArg(c);
|
||||
cout << " verbosity string = " << optarg << endl;
|
||||
error = Debug::checkVerbosityString(optarg);
|
||||
if (error) {
|
||||
usageInstructions();
|
||||
}
|
||||
g_debug_verbosity_string = strdup( optarg );
|
||||
break;
|
||||
case 'l': {
|
||||
checkArg(c);
|
||||
g_tester_length = atoi(optarg);
|
||||
@@ -306,25 +333,6 @@ static void parseOptions(int argc, char **argv)
|
||||
usageInstructions();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'c':
|
||||
checkArg(c);
|
||||
cout << " component filter string = " << optarg << endl;
|
||||
error = Debug::checkFilterString( optarg );
|
||||
if (error) {
|
||||
usageInstructions();
|
||||
}
|
||||
g_debug_filter_string = strdup( optarg );
|
||||
break;
|
||||
case 's': {
|
||||
checkArg(c);
|
||||
long long start_time = atoll(optarg);
|
||||
cout << " debug start cycle = " << start_time << endl;
|
||||
if (start_time == 0) {
|
||||
usageInstructions();
|
||||
}
|
||||
g_debug_start_time = start_time;
|
||||
break;
|
||||
}
|
||||
case 'k': {
|
||||
checkArg(c);
|
||||
@@ -336,11 +344,6 @@ static void parseOptions(int argc, char **argv)
|
||||
g_wait_time = atoi(optarg);
|
||||
break;
|
||||
}
|
||||
case 'o':
|
||||
checkArg(c);
|
||||
cout << " output file = " << optarg << endl;
|
||||
g_debug_output_filename = strdup( optarg );
|
||||
break;
|
||||
case 'd':
|
||||
checkArg(c);
|
||||
cout << " driver type = " << optarg << endl;
|
||||
@@ -356,6 +359,12 @@ static void parseOptions(int argc, char **argv)
|
||||
cout << " num completions before pass = " << optarg << endl;
|
||||
num_completions = atoi( optarg );
|
||||
break;
|
||||
case 'z':
|
||||
checkArg(c);
|
||||
trace_filename = string(optarg);
|
||||
cout << " tracefile = " << trace_filename << endl;
|
||||
break;
|
||||
|
||||
default:
|
||||
cerr << "parameter '" << c << "' unknown" << endl;
|
||||
usageInstructions();
|
||||
@@ -384,7 +393,7 @@ static void usageInstructions()
|
||||
}
|
||||
|
||||
cerr << endl;
|
||||
debug_ptr->usageInstructions();
|
||||
g_debug_ptr->usageInstructions();
|
||||
cerr << endl;
|
||||
|
||||
exit(1);
|
||||
|
||||
@@ -1,43 +1,71 @@
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TESTFRAMEWORK_H
|
||||
#define TESTFRAMEWORK_H
|
||||
|
||||
#include "mem/ruby/tester/Global_Tester.hh"
|
||||
#include "mem/ruby/common/Global.hh"
|
||||
#include "mem/ruby/tester/Tester_Globals.hh"
|
||||
|
||||
void tester_main(int argc, char **argv);
|
||||
|
||||
|
||||
@@ -230,8 +230,8 @@ RubyMemory::Port::recvTiming(PacketPtr pkt)
|
||||
}
|
||||
} else if (pkt->isWrite()) {
|
||||
type = RubyRequestType_ST;
|
||||
// } else if (pkt->isReadWrite()) {
|
||||
// type = RubyRequestType_RMW;
|
||||
} else if (pkt->isReadWrite()) {
|
||||
// type = RubyRequestType_RMW;
|
||||
}
|
||||
|
||||
RubyRequest ruby_request(pkt->getAddr(), pkt->getPtr<uint8_t>(),
|
||||
|
||||
0
tests/quick/40.m5threads-test-atomic/test.py
Normal file → Executable file
0
tests/quick/40.m5threads-test-atomic/test.py
Normal file → Executable file
Reference in New Issue
Block a user