diff --git a/src/mem/cache/SConscript b/src/mem/cache/SConscript index 0150692969..7910b93da9 100644 --- a/src/mem/cache/SConscript +++ b/src/mem/cache/SConscript @@ -47,6 +47,7 @@ DebugFlag('CacheTags') DebugFlag('CacheVerbose') DebugFlag('HWPrefetch') DebugFlag('MSHR') +DebugFlag('HWPrefetchQueue') # CacheTags is so outrageously verbose, printing the cache's entire tag # array on each timing access, that you should probably have to ask for diff --git a/src/mem/cache/prefetch/queued.cc b/src/mem/cache/prefetch/queued.cc index 9aa4f89dca..a2e19526a1 100644 --- a/src/mem/cache/prefetch/queued.cc +++ b/src/mem/cache/prefetch/queued.cc @@ -43,6 +43,7 @@ #include "base/logging.hh" #include "base/trace.hh" #include "debug/HWPrefetch.hh" +#include "debug/HWPrefetchQueue.hh" #include "mem/cache/base.hh" #include "mem/request.hh" #include "params/QueuedPrefetcher.hh" @@ -116,6 +117,25 @@ Queued::~Queued() } } +void +Queued::printQueue(const std::list &queue) const +{ + int pos = 0; + std::string queue_name = ""; + if (&queue == &pfq) { + queue_name = "PFQ"; + } else { + assert(&queue == &pfqMissingTranslation); + queue_name = "PFTransQ"; + } + + for (const_iterator it = queue.cbegin(); it != queue.cend(); + it++, pos++) { + DPRINTF(HWPrefetchQueue, "%s[%d]: Prefetch Req Addr: %#x prio: %3d\n", + queue_name, pos, it->pkt->getAddr(), it->priority); + } +} + size_t Queued::getMaxPermittedPrefetches(size_t total) const { @@ -488,6 +508,9 @@ Queued::addToQueue(std::list &queue, it++; queue.insert(it, dpp); } + + if (Debug::HWPrefetchQueue) + printQueue(queue); } } // namespace prefetch diff --git a/src/mem/cache/prefetch/queued.hh b/src/mem/cache/prefetch/queued.hh index 31feb30aaa..d710bc0b44 100644 --- a/src/mem/cache/prefetch/queued.hh +++ b/src/mem/cache/prefetch/queued.hh @@ -204,6 +204,8 @@ class Queued : public Base return pfq.empty() ? MaxTick : pfq.front().tick; } + void printQueue(const std::list &queue) const; + private: /**