diff options
Diffstat (limited to 'src/mem/ruby/recorder')
-rw-r--r-- | src/mem/ruby/recorder/CacheRecorder.cc | 34 | ||||
-rw-r--r-- | src/mem/ruby/recorder/CacheRecorder.hh | 8 | ||||
-rw-r--r-- | src/mem/ruby/recorder/TraceRecord.hh | 12 | ||||
-rw-r--r-- | src/mem/ruby/recorder/Tracer.cc | 1 | ||||
-rw-r--r-- | src/mem/ruby/recorder/Tracer.hh | 1 |
5 files changed, 20 insertions, 36 deletions
diff --git a/src/mem/ruby/recorder/CacheRecorder.cc b/src/mem/ruby/recorder/CacheRecorder.cc index 32db211b6..1d08eef12 100644 --- a/src/mem/ruby/recorder/CacheRecorder.cc +++ b/src/mem/ruby/recorder/CacheRecorder.cc @@ -26,31 +26,21 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include <algorithm> + #include "gzstream.hh" -#include "mem/gems_common/PrioHeap.hh" #include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "mem/ruby/recorder/CacheRecorder.hh" -#include "mem/ruby/recorder/TraceRecord.hh" using namespace std; -CacheRecorder::CacheRecorder() -{ - m_records_ptr = new PrioHeap<TraceRecord>; -} - -CacheRecorder::~CacheRecorder() -{ - delete m_records_ptr; -} - void CacheRecorder::addRecord(Sequencer* sequencer, const Address& data_addr, const Address& pc_addr, RubyRequestType type, Time time) { - m_records_ptr-> - insert(TraceRecord(sequencer, data_addr, pc_addr, type, time)); + TraceRecord rec(sequencer, data_addr, pc_addr, type, time); + m_records.push_back(rec); } int @@ -62,13 +52,15 @@ CacheRecorder::dumpRecords(string filename) return 0; } - int counter = 0; - while (m_records_ptr->size() != 0) { - TraceRecord record = m_records_ptr->extractMin(); - record.output(out); - counter++; - } - return counter; + std::sort(m_records.begin(), m_records.end(), greater<TraceRecord>()); + + int size = m_records.size(); + for (int i = 0; i < size; ++i) + m_records[i].output(out); + + m_records.clear(); + + return size; } void diff --git a/src/mem/ruby/recorder/CacheRecorder.hh b/src/mem/ruby/recorder/CacheRecorder.hh index 18c246c9f..14066c387 100644 --- a/src/mem/ruby/recorder/CacheRecorder.hh +++ b/src/mem/ruby/recorder/CacheRecorder.hh @@ -36,13 +36,14 @@ #include <iostream> #include <string> +#include <vector> #include "mem/protocol/CacheRequestType.hh" #include "mem/ruby/common/Global.hh" #include "mem/ruby/libruby_internal.hh" #include "mem/ruby/system/NodeID.hh" +#include "mem/ruby/recorder/TraceRecord.hh" -template <class TYPE> class PrioHeap; class Address; class TraceRecord; class Sequencer; @@ -50,9 +51,6 @@ class Sequencer; class CacheRecorder { public: - CacheRecorder(); - ~CacheRecorder(); - void addRecord(Sequencer* sequencer, const Address& data_addr, const Address& pc_addr, RubyRequestType type, Time time); int dumpRecords(std::string filename); @@ -64,7 +62,7 @@ class CacheRecorder CacheRecorder(const CacheRecorder& obj); CacheRecorder& operator=(const CacheRecorder& obj); - PrioHeap<TraceRecord>* m_records_ptr; + std::vector<TraceRecord> m_records; }; inline std::ostream& diff --git a/src/mem/ruby/recorder/TraceRecord.hh b/src/mem/ruby/recorder/TraceRecord.hh index 98e78b20e..ed066debb 100644 --- a/src/mem/ruby/recorder/TraceRecord.hh +++ b/src/mem/ruby/recorder/TraceRecord.hh @@ -60,12 +60,6 @@ class TraceRecord TraceRecord(const TraceRecord& obj); TraceRecord& operator=(const TraceRecord& obj); - bool - node_less_then_eq(const TraceRecord& rec) const - { - return this->m_time <= rec.m_time; - } - void issueRequest() const; void print(std::ostream& out) const; @@ -73,6 +67,8 @@ class TraceRecord bool input(std::istream& in); private: + friend bool operator>(const TraceRecord& n1, const TraceRecord& n2); + Sequencer* m_sequencer_ptr; Time m_time; Address m_data_address; @@ -81,9 +77,9 @@ class TraceRecord }; inline bool -node_less_then_eq(const TraceRecord& n1, const TraceRecord& n2) +operator>(const TraceRecord& n1, const TraceRecord& n2) { - return n1.node_less_then_eq(n2); + return n1.m_time > n2.m_time; } inline std::ostream& diff --git a/src/mem/ruby/recorder/Tracer.cc b/src/mem/ruby/recorder/Tracer.cc index 23dafdb6c..bff59a832 100644 --- a/src/mem/ruby/recorder/Tracer.cc +++ b/src/mem/ruby/recorder/Tracer.cc @@ -27,7 +27,6 @@ */ #include "base/cprintf.hh" -#include "mem/gems_common/PrioHeap.hh" #include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "mem/ruby/recorder/TraceRecord.hh" #include "mem/ruby/recorder/Tracer.hh" diff --git a/src/mem/ruby/recorder/Tracer.hh b/src/mem/ruby/recorder/Tracer.hh index d468b4920..4b81d6121 100644 --- a/src/mem/ruby/recorder/Tracer.hh +++ b/src/mem/ruby/recorder/Tracer.hh @@ -46,7 +46,6 @@ #include "params/RubyTracer.hh" #include "sim/sim_object.hh" -template <class TYPE> class PrioHeap; class Address; class TraceRecord; class Sequencer; |