changeset ae88ecf37145 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ae88ecf37145
description:
Ruby: Remove RubyEventQueue
This patch removes RubyEventQueue. Consumer objects now rely on
RubySystem
or themselves for scheduling events.
diffstat:
src/cpu/testers/directedtest/RubyDirectedTester.cc | 1 -
src/cpu/testers/rubytest/Check.cc | 4 +-
src/cpu/testers/rubytest/RubyTester.cc | 5 +-
src/mem/ruby/buffers/MessageBuffer.cc | 53 ++--
src/mem/ruby/buffers/MessageBuffer.hh | 3 +-
src/mem/ruby/common/Consumer.cc | 63 ++++++
src/mem/ruby/common/Consumer.hh | 55 +++--
src/mem/ruby/common/Global.cc | 2 -
src/mem/ruby/common/Global.hh | 3 -
src/mem/ruby/common/SConscript | 1 +
src/mem/ruby/common/TypeDefines.hh | 2 -
src/mem/ruby/eventqueue/RubyEventQueue.cc | 68 -------
src/mem/ruby/eventqueue/RubyEventQueue.hh | 96
----------
src/mem/ruby/eventqueue/RubyEventQueueNode.cc | 41 ----
src/mem/ruby/eventqueue/RubyEventQueueNode.hh | 69 -------
src/mem/ruby/eventqueue/SConscript | 37 ---
src/mem/ruby/network/garnet/BaseGarnetNetwork.cc | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc | 26 +-
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh | 6 +-
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc | 6 +-
src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc | 6 +-
src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc | 8 +-
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/flit_d.cc | 6 +-
src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh | 6 +-
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc | 4 +-
src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc | 30 +-
src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc | 4 +-
src/mem/ruby/network/garnet/flexible-pipeline/Router.cc | 55 ++--
src/mem/ruby/network/garnet/flexible-pipeline/flit.cc | 4 +-
src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc | 4 +-
src/mem/ruby/network/orion/NetworkPower.cc | 4 +-
src/mem/ruby/network/simple/PerfectSwitch.cc | 2 +-
src/mem/ruby/network/simple/Throttle.cc | 8 +-
src/mem/ruby/profiler/Profiler.cc | 26 +-
src/mem/ruby/profiler/Profiler.hh | 19 +-
src/mem/ruby/profiler/StoreTrace.cc | 6 +-
src/mem/ruby/profiler/StoreTrace.hh | 1 -
src/mem/ruby/slicc_interface/Message.hh | 6 +-
src/mem/ruby/slicc_interface/RubySlicc_Util.hh | 2 +-
src/mem/ruby/system/CacheMemory.cc | 13 +-
src/mem/ruby/system/CacheMemory.hh | 2 -
src/mem/ruby/system/RubyMemoryControl.cc | 12 +-
src/mem/ruby/system/RubyPort.cc | 4 +-
src/mem/ruby/system/Sequencer.cc | 22 +-
src/mem/ruby/system/Sequencer.hh | 8 +-
src/mem/ruby/system/System.cc | 7 +-
src/mem/ruby/system/System.hh | 14 +-
src/mem/ruby/system/TimerTable.cc | 8 +-
src/mem/ruby/system/TimerTable.hh | 5 +-
src/mem/ruby/system/WireBuffer.cc | 11 +-
src/mem/ruby/system/WireBuffer.hh | 1 -
src/mem/slicc/ast/AST.py | 2 +-
src/mem/slicc/ast/FuncCallExprAST.py | 4 +-
src/mem/slicc/symbols/StateMachine.py | 12 +-
src/mem/slicc/symbols/Type.py | 2 +-
65 files changed, 317 insertions(+), 584 deletions(-)
diffs (truncated from 2457 to 300 lines):
diff -r 88d422d737db -r ae88ecf37145
src/cpu/testers/directedtest/RubyDirectedTester.cc
--- a/src/cpu/testers/directedtest/RubyDirectedTester.cc Mon Aug 27
01:00:54 2012 -0500
+++ b/src/cpu/testers/directedtest/RubyDirectedTester.cc Mon Aug 27
01:00:55 2012 -0500
@@ -42,7 +42,6 @@
#include "cpu/testers/directedtest/DirectedGenerator.hh"
#include "cpu/testers/directedtest/RubyDirectedTester.hh"
#include "debug/DirectedTest.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
#include "sim/sim_exit.hh"
RubyDirectedTester::RubyDirectedTester(const Params *p)
diff -r 88d422d737db -r ae88ecf37145 src/cpu/testers/rubytest/Check.cc
--- a/src/cpu/testers/rubytest/Check.cc Mon Aug 27 01:00:54 2012 -0500
+++ b/src/cpu/testers/rubytest/Check.cc Mon Aug 27 01:00:55 2012 -0500
@@ -313,7 +313,7 @@
proc, address, data, byte_number,
(int)m_value + byte_number,
(int)data->getByte(byte_number), *this,
- g_eventQueue_ptr->getTime());
+ g_system_ptr->getTime());
}
}
DPRINTF(RubyTest, "Action/check success\n");
@@ -328,7 +328,7 @@
} else {
panic("Unexpected TesterStatus: %s proc: %d data: %s m_status: %s "
"time: %d\n",
- *this, proc, data, m_status, g_eventQueue_ptr->getTime());
+ *this, proc, data, m_status, g_system_ptr->getTime());
}
DPRINTF(RubyTest, "proc: %d, Address: 0x%x\n", proc,
diff -r 88d422d737db -r ae88ecf37145 src/cpu/testers/rubytest/RubyTester.cc
--- a/src/cpu/testers/rubytest/RubyTester.cc Mon Aug 27 01:00:54 2012 -0500
+++ b/src/cpu/testers/rubytest/RubyTester.cc Mon Aug 27 01:00:55 2012 -0500
@@ -45,7 +45,6 @@
#include "debug/RubyTest.hh"
#include "mem/ruby/common/Global.hh"
#include "mem/ruby/common/SubBlock.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
#include "mem/ruby/system/System.hh"
#include "sim/sim_exit.hh"
#include "sim/system.hh"
@@ -192,7 +191,7 @@
RubyTester::hitCallback(NodeID proc, SubBlock* data)
{
// Mark that we made progress
- m_last_progress_vector[proc] = g_eventQueue_ptr->getTime();
+ m_last_progress_vector[proc] = g_system_ptr->getTime();
DPRINTF(RubyTest, "completed request for proc: %d\n", proc);
DPRINTF(RubyTest, "addr: 0x%x, size: %d, data: ",
@@ -230,7 +229,7 @@
RubyTester::checkForDeadlock()
{
int size = m_last_progress_vector.size();
- Time current_time = g_eventQueue_ptr->getTime();
+ Time current_time = g_system_ptr->getTime();
for (int processor = 0; processor < size; processor++) {
if ((current_time - m_last_progress_vector[processor]) >
m_deadlock_threshold) {
diff -r 88d422d737db -r ae88ecf37145 src/mem/ruby/buffers/MessageBuffer.cc
--- a/src/mem/ruby/buffers/MessageBuffer.cc Mon Aug 27 01:00:54 2012 -0500
+++ b/src/mem/ruby/buffers/MessageBuffer.cc Mon Aug 27 01:00:55 2012 -0500
@@ -66,10 +66,10 @@
int
MessageBuffer::getSize()
{
- if (m_time_last_time_size_checked == g_eventQueue_ptr->getTime()) {
+ if (m_time_last_time_size_checked == g_system_ptr->getTime()) {
return m_size_last_time_size_checked;
} else {
- m_time_last_time_size_checked = g_eventQueue_ptr->getTime();
+ m_time_last_time_size_checked = g_system_ptr->getTime();
m_size_last_time_size_checked = m_size;
return m_size;
}
@@ -89,11 +89,11 @@
// until next cycle, but enqueue operations effect the visible
// size immediately
int current_size = max(m_size_at_cycle_start, m_size);
- if (m_time_last_time_pop < g_eventQueue_ptr->getTime()) {
+ if (m_time_last_time_pop < g_system_ptr->getTime()) {
// no pops this cycle - m_size is correct
current_size = m_size;
} else {
- if (m_time_last_time_enqueue < g_eventQueue_ptr->getTime()) {
+ if (m_time_last_time_enqueue < g_system_ptr->getTime()) {
// no enqueues this cycle - m_size_at_cycle_start is correct
current_size = m_size_at_cycle_start;
} else {
@@ -155,9 +155,9 @@
m_size++;
// record current time incase we have a pop that also adjusts my size
- if (m_time_last_time_enqueue < g_eventQueue_ptr->getTime()) {
+ if (m_time_last_time_enqueue < g_system_ptr->getTime()) {
m_msgs_this_cycle = 0; // first msg this cycle
- m_time_last_time_enqueue = g_eventQueue_ptr->getTime();
+ m_time_last_time_enqueue = g_system_ptr->getTime();
}
m_msgs_this_cycle++;
@@ -168,7 +168,7 @@
// Calculate the arrival time of the message, that is, the first
// cycle the message can be dequeued.
assert(delta>0);
- Time current_time = g_eventQueue_ptr->getTime();
+ Time current_time = g_system_ptr->getTime();
Time arrival_time = 0;
if (!RubySystem::getRandomization() || (m_randomization == false)) {
// No randomization
@@ -192,10 +192,10 @@
panic("FIFO ordering violated: %s name: %s current time: %d "
"delta: %d arrival_time: %d last arrival_time: %d\n",
*this, m_name,
- current_time * g_eventQueue_ptr->getClock(),
- delta * g_eventQueue_ptr->getClock(),
- arrival_time * g_eventQueue_ptr->getClock(),
- m_last_arrival_time * g_eventQueue_ptr->getClock());
+ current_time * g_system_ptr->getClock(),
+ delta * g_system_ptr->getClock(),
+ arrival_time * g_system_ptr->getClock(),
+ m_last_arrival_time * g_system_ptr->getClock());
}
}
@@ -208,10 +208,10 @@
Message* msg_ptr = message.get();
assert(msg_ptr != NULL);
- assert(g_eventQueue_ptr->getTime() >= msg_ptr->getLastEnqueueTime() &&
+ assert(g_system_ptr->getTime() >= msg_ptr->getLastEnqueueTime() &&
"ensure we aren't dequeued early");
- msg_ptr->setDelayedCycles(g_eventQueue_ptr->getTime() -
+ msg_ptr->setDelayedCycles(g_system_ptr->getTime() -
msg_ptr->getLastEnqueueTime() +
msg_ptr->getDelayedCycles());
msg_ptr->setLastEnqueueTime(arrival_time);
@@ -223,12 +223,12 @@
greater<MessageBufferNode>());
DPRINTF(RubyQueue, "Enqueue with arrival_time %lld.\n",
- arrival_time * g_eventQueue_ptr->getClock());
+ arrival_time * g_system_ptr->getClock());
DPRINTF(RubyQueue, "Enqueue Message: %s.\n", (*(message.get())));
// Schedule the wakeup
if (m_consumer_ptr != NULL) {
- g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, arrival_time);
+ m_consumer_ptr->scheduleEventAbsolute(arrival_time);
m_consumer_ptr->storeEventInfo(m_vnet_id);
} else {
panic("No consumer: %s name: %s\n", *this, m_name);
@@ -287,9 +287,9 @@
// record previous size and time so the current buffer size isn't
// adjusted until next cycle
- if (m_time_last_time_pop < g_eventQueue_ptr->getTime()) {
+ if (m_time_last_time_pop < g_system_ptr->getTime()) {
m_size_at_cycle_start = m_size;
- m_time_last_time_pop = g_eventQueue_ptr->getTime();
+ m_time_last_time_pop = g_system_ptr->getTime();
}
m_size--;
}
@@ -315,12 +315,12 @@
MessageBufferNode node = m_prio_heap.front();
pop_heap(m_prio_heap.begin(), m_prio_heap.end(),
greater<MessageBufferNode>());
- node.m_time = g_eventQueue_ptr->getTime() + m_recycle_latency;
+ node.m_time = g_system_ptr->getTime() + m_recycle_latency;
m_prio_heap.back() = node;
push_heap(m_prio_heap.begin(), m_prio_heap.end(),
greater<MessageBufferNode>());
- g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr,
- g_eventQueue_ptr->getTime() + m_recycle_latency);
+ m_consumer_ptr->scheduleEventAbsolute(g_system_ptr->getTime() +
+ m_recycle_latency);
}
void
@@ -335,7 +335,7 @@
//
while(!m_stall_msg_map[addr].empty()) {
m_msg_counter++;
- MessageBufferNode msgNode(g_eventQueue_ptr->getTime() + 1,
+ MessageBufferNode msgNode(g_system_ptr->getTime() + 1,
m_msg_counter,
m_stall_msg_map[addr].front());
@@ -343,7 +343,7 @@
push_heap(m_prio_heap.begin(), m_prio_heap.end(),
greater<MessageBufferNode>());
- g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr,
msgNode.m_time);
+ m_consumer_ptr->scheduleEventAbsolute(msgNode.m_time);
m_stall_msg_map[addr].pop_front();
}
m_stall_msg_map.erase(addr);
@@ -364,7 +364,7 @@
while(!(map_iter->second).empty()) {
m_msg_counter++;
- MessageBufferNode msgNode(g_eventQueue_ptr->getTime() + 1,
+ MessageBufferNode msgNode(g_system_ptr->getTime() + 1,
m_msg_counter,
(map_iter->second).front());
@@ -372,8 +372,7 @@
push_heap(m_prio_heap.begin(), m_prio_heap.end(),
greater<MessageBufferNode>());
- g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr,
- msgNode.m_time);
+ m_consumer_ptr->scheduleEventAbsolute(msgNode.m_time);
(map_iter->second).pop_front();
}
}
@@ -407,8 +406,8 @@
// this function should only be called on dequeue
// ensure the msg hasn't been enqueued
- assert(msg_ptr->getLastEnqueueTime() <= g_eventQueue_ptr->getTime());
- msg_ptr->setDelayedCycles(g_eventQueue_ptr->getTime() -
+ assert(msg_ptr->getLastEnqueueTime() <= g_system_ptr->getTime());
+ msg_ptr->setDelayedCycles(g_system_ptr->getTime() -
msg_ptr->getLastEnqueueTime() +
msg_ptr->getDelayedCycles());
delay_cycles = msg_ptr->getDelayedCycles();
diff -r 88d422d737db -r ae88ecf37145 src/mem/ruby/buffers/MessageBuffer.hh
--- a/src/mem/ruby/buffers/MessageBuffer.hh Mon Aug 27 01:00:54 2012 -0500
+++ b/src/mem/ruby/buffers/MessageBuffer.hh Mon Aug 27 01:00:55 2012 -0500
@@ -45,7 +45,6 @@
#include "mem/ruby/common/Address.hh"
#include "mem/ruby/common/Consumer.hh"
#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/eventqueue/RubyEventQueue.hh"
#include "mem/ruby/slicc_interface/Message.hh"
class MessageBuffer
@@ -70,7 +69,7 @@
isReady() const
{
return ((m_prio_heap.size() > 0) &&
- (m_prio_heap.front().m_time <= g_eventQueue_ptr->getTime()));
+ (m_prio_heap.front().m_time <= g_system_ptr->getTime()));
}
void
diff -r 88d422d737db -r ae88ecf37145 src/mem/ruby/common/Consumer.cc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/mem/ruby/common/Consumer.cc Mon Aug 27 01:00:55 2012 -0500
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2012 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "mem/ruby/common/Consumer.hh"
+#include "mem/ruby/common/Global.hh"
+#include "mem/ruby/system/System.hh"
+
+void
+Consumer::scheduleEvent(Time timeDelta)
+{
+ scheduleEvent(g_system_ptr, timeDelta);
+}
+
+void
+Consumer::scheduleEvent(EventManager *em, Time timeDelta)
+{
+ scheduleEventAbsolute(em, timeDelta + g_system_ptr->getTime());
+}
+
+void
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev