diff options
author | Nathan Binkert <nate@binkert.org> | 2010-06-10 23:17:07 -0700 |
---|---|---|
committer | Nathan Binkert <nate@binkert.org> | 2010-06-10 23:17:07 -0700 |
commit | dd133c7b24aba128546d24e6042b0e0d46673aaf (patch) | |
tree | 60f82f2f2b708a0fdb6967a7bf1262b435b5e6e0 /src/mem/ruby/network/garnet/flexible-pipeline | |
parent | 3df84fd8a0ce3959c0deb4c206d910fc0d050f47 (diff) | |
download | gem5-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/flexible-pipeline')
5 files changed, 25 insertions, 22 deletions
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh index c23d55b48..9f1311dce 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh @@ -37,7 +37,6 @@ #include "mem/ruby/network/garnet/NetworkHeader.hh" #include "mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh" #include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh" -#include "mem/gems_common/PrioHeap.hh" #include "mem/ruby/common/NetDest.hh" class GarnetNetwork; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh index b6ebb601f..16b19204a 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh @@ -37,7 +37,6 @@ #include "mem/ruby/network/garnet/NetworkHeader.hh" #include "mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh" #include "mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh" -#include "mem/gems_common/PrioHeap.hh" #include "mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh" #include "mem/ruby/common/NetDest.hh" #include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh" diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh b/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh index 1cc8806e9..5aa01c5e7 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/flit.hh @@ -52,6 +52,16 @@ public: flit_type get_type(); void print(std::ostream& out) const; + static bool + greater(flit* n1, flit* 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*************/ int m_id; @@ -64,19 +74,6 @@ private: }; -inline extern bool node_less_then_eq(flit* n1, flit* n2); - -inline extern -bool node_less_then_eq(flit* n1, flit* 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& obj) { diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc index 7f41d6f8c..82eb08902 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.cc @@ -28,8 +28,12 @@ * Authors: Niket Agarwal */ +#include <algorithm> + #include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh" +using namespace std; + flitBuffer::flitBuffer() { max_size = INFINITE_; @@ -49,7 +53,7 @@ bool flitBuffer::isReady() { if(m_buffer.size() != 0 ) { - flit *t_flit = m_buffer.peekMin(); + flit *t_flit = m_buffer.front(); if(t_flit->get_time() <= g_eventQueue_ptr->getTime()) return true; } @@ -60,7 +64,7 @@ bool flitBuffer::isReadyForNext() { if(m_buffer.size() != 0 ) { - flit *t_flit = m_buffer.peekMin(); + flit *t_flit = m_buffer.front(); if(t_flit->get_time() <= (g_eventQueue_ptr->getTime() + 1)) return true; } @@ -79,17 +83,21 @@ void flitBuffer::setMaxSize(int maximum) flit* flitBuffer:: getTopFlit() { - return m_buffer.extractMin(); + flit *f = m_buffer.front(); + pop_heap(m_buffer.begin(), m_buffer.end(), flit::greater); + m_buffer.pop_back(); + return f; } flit* flitBuffer::peekTopFlit() { - return m_buffer.peekMin(); + return m_buffer.front(); } void flitBuffer::insert(flit *flt) { - m_buffer.insert(flt); + m_buffer.push_back(flt); + push_heap(m_buffer.begin(), m_buffer.end(), flit::greater); } void flitBuffer::print(std::ostream& out) const diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh index 646cd99c7..a5ec25590 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh @@ -32,9 +32,9 @@ #define FLIT_BUFFER_H #include <iostream> +#include <vector> #include "mem/ruby/network/garnet/NetworkHeader.hh" -#include "mem/gems_common/PrioHeap.hh" #include "mem/ruby/network/garnet/flexible-pipeline/flit.hh" class flitBuffer { @@ -54,7 +54,7 @@ public: /**********Data Members*********/ private: - PrioHeap <flit *> m_buffer; + std::vector<flit *> m_buffer; int size, max_size; }; |