ruby: Added the cache profiler to the new config system
authorBrad Beckmann <Brad.Beckmann@amd.com>
Sat, 30 Jan 2010 04:29:19 +0000 (20:29 -0800)
committerBrad Beckmann <Brad.Beckmann@amd.com>
Sat, 30 Jan 2010 04:29:19 +0000 (20:29 -0800)
configs/example/memtest-ruby.py
src/mem/ruby/profiler/CacheProfiler.cc
src/mem/ruby/profiler/CacheProfiler.hh
src/mem/ruby/profiler/Profiler.py
src/mem/ruby/system/Cache.py
src/mem/ruby/system/CacheMemory.cc

index 844acefb4ff5632d09851f631e74827558fdc933..c0569944e1c241b7f5300957b35c626b884aa5c5 100644 (file)
@@ -115,10 +115,14 @@ for (i, cpu) in enumerate(cpus):
     # Eventually this code should go in a python file specific to the
     # MOESI_hammer protocol
     #
-    
-    l1i_cache = L1Cache()
-    l1d_cache = L1Cache()
-    l2_cache = L2Cache()
+    l1i_profiler = CacheProfiler(description = ("l1i_%s_profiler" % i))
+    l1i_cache = L1Cache(cache_profiler = l1i_profiler)
+
+    l1d_profiler = CacheProfiler(description = ("l1d_%s_profiler" % i))
+    l1d_cache = L1Cache(cache_profiler = l1d_profiler)
+
+    l2_profiler = CacheProfiler(description = ("l2_%s_profiler" % i))
+    l2_cache = L2Cache(cache_profiler = l2_profiler)
 
     cpu_seq = RubySequencer(icache = l1i_cache,
                             dcache = l1d_cache,
index fad8d51b401f3ae1f9893a952fa5ef3cb58d494e..a01d68050714c572281c427453ba42b4051dd279 100644 (file)
 #include "mem/ruby/profiler/Profiler.hh"
 #include "mem/gems_common/Vector.hh"
 
-CacheProfiler::CacheProfiler(string description)
-  : m_requestSize(-1)
+CacheProfiler::CacheProfiler(const CacheProfilerParams* params)
+  : SimObject(params), m_requestSize(-1)
 {
-  m_description = description;
+  m_description = params->description;
   m_requestTypeVec_ptr = new Vector<int>;
   m_requestTypeVec_ptr->setSize(int(CacheRequestType_NUM));
 
@@ -141,3 +141,8 @@ void CacheProfiler::addStatSample(CacheRequestType requestType, AccessModeType t
   }
 }
 
+CacheProfiler *
+CacheProfilerParams::create()
+{
+    return new CacheProfiler(this);
+}
index 6d7c163cb0c57b70169cb797f176f4876dcb8307..eeed1153bd8b1cf1ff603df4e18ca3fe5e9d0e5a 100644 (file)
 #include "mem/protocol/PrefetchBit.hh"
 #include "mem/protocol/CacheRequestType.hh"
 
+#include "params/CacheProfiler.hh"
+
 template <class TYPE> class Vector;
 
-class CacheProfiler {
+class CacheProfiler : public SimObject {
 public:
   // Constructors
-  CacheProfiler(string description);
+  typedef CacheProfilerParams Params;
+  CacheProfiler(const Params *);
 
   // Destructor
   ~CacheProfiler();
index 7923f28f16aa37d1d177b7ffd375da96a8264f8b..7585d4978e22406972bc133c73d9b0571aea1960 100644 (file)
@@ -6,3 +6,8 @@ class RubyProfiler(SimObject):
     cxx_class = 'Profiler'
     hot_lines = Param.Bool(False, "")
     all_instructions = Param.Bool(False, "")
+
+class CacheProfiler(SimObject):
+    type = 'CacheProfiler'
+    cxx_class = 'CacheProfiler'
+    description = Param.String("")
index 209d6f6e27685cec63f4d94bd167301545803558..5cec5d6e61284c0e9097a3d19c141165e26e000b 100644 (file)
@@ -9,3 +9,4 @@ class RubyCache(SimObject):
     latency = Param.Int("");
     assoc = Param.Int("");
     replacement_policy = Param.String("PSEUDO_LRU", "");
+    cache_profiler = Param.CacheProfiler("");
index 11dd8ca9669da7a1de1def3215395a39ff1d7837..60783c43371a26c13240ce48d840a93fd4879c43 100644 (file)
@@ -57,6 +57,7 @@ CacheMemory::CacheMemory(const Params *p)
     m_latency = p->latency;
     m_cache_assoc = p->assoc;
     m_policy = p->replacement_policy;
+    m_profiler_ptr = p->cache_profiler;
 }
 
 
@@ -360,7 +361,7 @@ void CacheMemory::setMRU(const Address& address)
 void CacheMemory::profileMiss(const CacheMsg & msg) 
 {
   m_profiler_ptr->addStatSample(msg.getType(), msg.getAccessMode(), 
-                               msg.getSize(), msg.getPrefetch());
+                                msg.getSize(), msg.getPrefetch());
 }
 
 void CacheMemory::recordCacheContents(CacheRecorder& tr) const