summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/garnet/fixed-pipeline
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2010-06-10 23:17:07 -0700
committerNathan Binkert <nate@binkert.org>2010-06-10 23:17:07 -0700
commitdd133c7b24aba128546d24e6042b0e0d46673aaf (patch)
tree60f82f2f2b708a0fdb6967a7bf1262b435b5e6e0 /src/mem/ruby/network/garnet/fixed-pipeline
parent3df84fd8a0ce3959c0deb4c206d910fc0d050f47 (diff)
downloadgem5-dd133c7b24aba128546d24e6042b0e0d46673aaf.tar.xz
ruby: get rid of PrioHeap and use STL
One big difference is that PrioHeap puts the smallest element at the top of the heap, whereas stl puts the largest element on top, so I changed all comparisons so they did the right thing. Some usage of PrioHeap was simply changed to a std::vector, using sort at the right time, other usage had me just use the various heap functions in the stl.
Diffstat (limited to 'src/mem/ruby/network/garnet/fixed-pipeline')
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh1
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc4
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh15
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh23
4 files changed, 22 insertions, 21 deletions
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
index 29699562d..39fdd3c6f 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
@@ -37,7 +37,6 @@
#include "mem/ruby/network/garnet/NetworkHeader.hh"
#include "mem/ruby/common/Consumer.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
-#include "mem/gems_common/PrioHeap.hh"
#include "mem/ruby/network/orion/power_bus.hh"
class GarnetNetwork_d;
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc
index 38510c758..5387604d4 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc
@@ -49,7 +49,7 @@ bool flitBuffer_d::isReady()
{
if(m_buffer.size() != 0 )
{
- flit_d *t_flit = m_buffer.peekMin();
+ flit_d *t_flit = peekTopFlit();
if(t_flit->get_time() <= g_eventQueue_ptr->getTime())
return true;
}
@@ -60,7 +60,7 @@ bool flitBuffer_d::isReadyForNext()
{
if(m_buffer.size() != 0 )
{
- flit_d *t_flit = m_buffer.peekMin();
+ flit_d *t_flit = peekTopFlit();
if(t_flit->get_time() <= (g_eventQueue_ptr->getTime() + 1))
return true;
}
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh
index 976fa4053..8aa869f82 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh
@@ -31,10 +31,11 @@
#ifndef FLIT_BUFFER_D_H
#define FLIT_BUFFER_D_H
+#include <algorithm>
#include <iostream>
+#include <vector>
#include "mem/ruby/network/garnet/NetworkHeader.hh"
-#include "mem/gems_common/PrioHeap.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/flit_d.hh"
class flitBuffer_d {
@@ -51,19 +52,23 @@ public:
inline flit_d* getTopFlit()
{
- return m_buffer.extractMin();
+ flit_d *f = m_buffer.front();
+ std::pop_heap(m_buffer.begin(), m_buffer.end(), flit_d::greater);
+ m_buffer.pop_back();
+ return f;
}
inline flit_d* peekTopFlit()
{
- return m_buffer.peekMin();
+ return m_buffer.front();
}
inline void insert(flit_d *flt)
{
- m_buffer.insert(flt);
+ m_buffer.push_back(flt);
+ std::push_heap(m_buffer.begin(), m_buffer.end(), flit_d::greater);
}
/**********Data Members*********/
private:
- PrioHeap <flit_d *> m_buffer;
+ std::vector<flit_d *> m_buffer;
int size, max_size;
};
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh
index 39bbe011d..ec2774a94 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh
@@ -115,6 +115,16 @@ public:
return src_delay;
}
+ static bool
+ greater(flit_d* n1, flit_d* n2)
+ {
+ if (n1->get_time() == n2->get_time()) {
+ //ASSERT(n1->flit_id != n2->flit_id);
+ return (n1->get_id() > n2->get_id());
+ } else {
+ return (n1->get_time() > n2->get_time());
+ }
+ }
private:
/************Data Members*************/
@@ -132,19 +142,6 @@ private:
};
-inline extern bool node_less_then_eq(flit_d* n1, flit_d* n2);
-
-inline extern
-bool node_less_then_eq(flit_d* n1, flit_d* n2)
-{
- if (n1->get_time() == n2->get_time()) {
-// ASSERT(n1->flit_id != n2->flit_id);
- return (n1->get_id() <= n2->get_id());
- } else {
- return (n1->get_time() <= n2->get_time());
- }
-}
-
inline std::ostream&
operator<<(std::ostream& out, const flit_d& obj)
{