changeset c1ee8282291d in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=c1ee8282291d
description:
        CPA: Add new object for gathering critical path annotations.

diffstat:

13 files changed, 2015 insertions(+), 202 deletions(-)
SConstruct                     |    3 
src/arch/alpha/isa/decoder.isa |   59 +
src/arch/alpha/isa/main.isa    |    1 
src/base/CPA.py                |    8 
src/base/SConscript            |    9 
src/base/annotate.cc           |  122 ---
src/base/annotate.hh           |   73 --
src/base/cp_annotate.cc        | 1404 ++++++++++++++++++++++++++++++++++++++++
src/base/cp_annotate.hh        |  522 ++++++++++++++
src/base/hashmap.hh            |   10 
src/base/loader/symtab.hh      |    1 
src/python/m5/SimObject.py     |    3 
src/sim/pseudo_inst.cc         |    2 

diffs (truncated from 2349 to 300 lines):

diff -r 960caa92210d -r c1ee8282291d SConstruct
--- a/SConstruct        Thu Feb 26 19:29:16 2009 -0500
+++ b/SConstruct        Thu Feb 26 19:29:17 2009 -0500
@@ -689,6 +689,7 @@
     BoolVariable('USE_MYSQL', 'Use MySQL for stats output', have_mysql),
     BoolVariable('USE_FENV', 'Use <fenv.h> IEEE mode control', have_fenv),
     BoolVariable('USE_CHECKER', 'Use checker for detailed CPU models', False),
+    BoolVariable('CP_ANNOTATE', 'Enable critical path annotation capability', 
False),
     )
 
 nonsticky_vars.AddVariables(
@@ -699,7 +700,7 @@
 env.ExportVariables = ['FULL_SYSTEM', 'ALPHA_TLASER', 'USE_FENV', \
                        'USE_MYSQL', 'NO_FAST_ALLOC', 'FAST_ALLOC_DEBUG', \
                        'FAST_ALLOC_STATS', 'SS_COMPATIBLE_FP', \
-                       'USE_CHECKER', 'TARGET_ISA']
+                       'USE_CHECKER', 'TARGET_ISA', 'CP_ANNOTATE']
 
 ###################################################
 #
diff -r 960caa92210d -r c1ee8282291d src/arch/alpha/isa/decoder.isa
--- a/src/arch/alpha/isa/decoder.isa    Thu Feb 26 19:29:16 2009 -0500
+++ b/src/arch/alpha/isa/decoder.isa    Thu Feb 26 19:29:17 2009 -0500
@@ -870,9 +870,62 @@
             0x54: m5panic({{
                 panic("M5 panic instruction called at pc=%#x.", xc->readPC());
             }}, IsNonSpeculative);
-            0x55: m5reserved1({{
-                warn("M5 reserved opcode ignored");
-            }}, IsNonSpeculative);
+#define  CPANN(lbl) CPA::cpa()->lbl(xc->tcBase())
+            0x55: decode RA {
+                0x00: m5a_old({{
+                    panic("Deprecated M5 annotate instruction executed at 
pc=%#x\n",
+                        xc->readPC());
+                }}, IsNonSpeculative);
+                0x01: m5a_bsm({{
+                    CPANN(swSmBegin);
+                }}, IsNonSpeculative);
+                0x02: m5a_esm({{
+                    CPANN(swSmEnd);
+                }}, IsNonSpeculative);
+                0x03: m5a_begin({{
+                    CPANN(swExplictBegin);
+                }}, IsNonSpeculative);
+                0x04: m5a_end({{
+                    CPANN(swEnd);
+                }}, IsNonSpeculative);
+                0x06: m5a_q({{
+                    CPANN(swQ);
+                }}, IsNonSpeculative);
+                0x07: m5a_dq({{
+                    CPANN(swDq);
+                }}, IsNonSpeculative);
+                0x08: m5a_wf({{
+                    CPANN(swWf);
+                }}, IsNonSpeculative);
+                0x09: m5a_we({{
+                    CPANN(swWe);
+                }}, IsNonSpeculative);
+                0x0C: m5a_sq({{
+                    CPANN(swSq);
+                }}, IsNonSpeculative);
+                0x0D: m5a_aq({{
+                    CPANN(swAq);
+                }}, IsNonSpeculative);
+                0x0E: m5a_pq({{
+                    CPANN(swPq);
+                }}, IsNonSpeculative);
+                0x0F: m5a_l({{
+                    CPANN(swLink);
+                }}, IsNonSpeculative);
+                0x10: m5a_identify({{
+                    CPANN(swIdentify);
+                }}, IsNonSpeculative);
+                0x11: m5a_getid({{
+                    R0 = CPANN(swGetId);
+                }}, IsNonSpeculative);
+                0x13: m5a_scl({{
+                    CPANN(swSyscallLink);
+                }}, IsNonSpeculative);
+                0x14: m5a_rq({{
+                    CPANN(swRq);
+                }}, IsNonSpeculative);
+            } // M5 Annotate Operations
+#undef CPANN
             0x56: m5reserved2({{
                 warn("M5 reserved opcode ignored");
             }}, IsNonSpeculative);
diff -r 960caa92210d -r c1ee8282291d src/arch/alpha/isa/main.isa
--- a/src/arch/alpha/isa/main.isa       Thu Feb 26 19:29:16 2009 -0500
+++ b/src/arch/alpha/isa/main.isa       Thu Feb 26 19:29:17 2009 -0500
@@ -68,6 +68,7 @@
 output exec {{
 #include <math.h>
 
+#include "base/cp_annotate.hh"
 #include "sim/pseudo_inst.hh"
 #include "arch/alpha/ipr.hh"
 #include "base/fenv.hh"
diff -r 960caa92210d -r c1ee8282291d src/base/CPA.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/src/base/CPA.py   Thu Feb 26 19:29:17 2009 -0500
@@ -0,0 +1,8 @@
+from m5.SimObject import SimObject
+from m5.params import *
+
+class CPA(SimObject):
+    type = 'CPA'
+
+    enabled = Param.Bool(False, "Is Annotation enabled?")
+    user_apps = VectorParam.String([], "List of apps to get symbols for")
diff -r 960caa92210d -r c1ee8282291d src/base/SConscript
--- a/src/base/SConscript       Thu Feb 26 19:29:16 2009 -0500
+++ b/src/base/SConscript       Thu Feb 26 19:29:17 2009 -0500
@@ -30,7 +30,9 @@
 
 Import('*')
 
-Source('annotate.cc')
+if env['CP_ANNOTATE']:
+    SimObject('CPA.py')
+    Source('cp_annotate.cc')
 Source('atomicio.cc')
 Source('bigint.cc')
 Source('circlebuf.cc')
@@ -82,6 +84,8 @@
     Source('stats/mysql.cc')
 
 TraceFlag('Annotate', "State machine annotation debugging")
+TraceFlag('AnnotateQ', "State machine annotation queue debugging")
+TraceFlag('AnnotateVerbose', "Dump all state machine annotation details")
 TraceFlag('GDBAcc', "Remote debugger accesses")
 TraceFlag('GDBExtra', "Dump extra information on reads and writes")
 TraceFlag('GDBMisc', "Breakpoints, traps, watchpoints, etc.")
@@ -96,3 +100,6 @@
     [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv',
       'GDBExtra' ],
     desc="All Remote debugging flags")
+CompoundFlag('AnnotateAll', ['Annotate', 'AnnotateQ', 'AnnotateVerbose'],
+    desc="All Annotation flags")
+
diff -r 960caa92210d -r c1ee8282291d src/base/annotate.cc
--- a/src/base/annotate.cc      Thu Feb 26 19:29:16 2009 -0500
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Ali Saidi
- */
-
-#include "base/annotate.hh"
-#include "base/callback.hh"
-#include "base/output.hh"
-#include "base/trace.hh"
-#include "sim/core.hh"
-#include "sim/sim_exit.hh"
-#include "sim/system.hh"
-
-
-
-class AnnotateDumpCallback : public Callback
-{
-  public:
-    virtual void process();
-};
-
-void
-AnnotateDumpCallback::process()
-{
-    Annotate::annotations.dump();
-}
-
-namespace Annotate {
-
-
-Annotate annotations;
-
-Annotate::Annotate()
-{
-    registerExitCallback(new AnnotateDumpCallback);
-}
-
-void
-Annotate::add(System *sys, Addr stack, uint32_t sm, uint32_t st,
-        uint32_t wm, uint32_t ws)
-{
-    AnnotateData *an;
-
-    an = new AnnotateData;
-    an->time = curTick;
-
-    std::map<System*, std::string>::iterator i = nameCache.find(sys);
-    if (i == nameCache.end()) {
-        nameCache[sys] = sys->name();
-    }
-
-    an->system = nameCache[sys];
-    an->stack = stack;
-    an->stateMachine = sm;
-    an->curState = st;
-    an->waitMachine = wm;
-    an->waitState = ws;
-
-    data.push_back(an);
-    if (an->waitMachine)
-        DPRINTF(Annotate, "Annotating: %s(%#llX) %d:%d waiting on %d:%d\n",
-                an->system, an->stack, an->stateMachine, an->curState,
-                an->waitMachine, an->waitState);
-    else
-        DPRINTF(Annotate, "Annotating: %s(%#llX) %d:%d beginning\n", 
an->system,
-                an->stack, an->stateMachine, an->curState);
-
-    DPRINTF(Annotate, "Now %d events on list\n", data.size());
-
-}
-
-void
-Annotate::dump()
-{
-
-    std::list<AnnotateData*>::iterator i;
-
-    i = data.begin();
-
-    if (i == data.end())
-        return;
-
-    std::ostream *os = simout.create("annotate.dat");
-
-    AnnotateData *an;
-
-    while (i != data.end()) {
-        DPRINTF(Annotate, "Writing\n", data.size());
-        an = *i;
-        ccprintf(*os, "%d %s(%#llX) %d %d %d %d\n", an->time, an->system,
-                an->stack, an->stateMachine, an->curState, an->waitMachine,
-                an->waitState);
-        i++;
-    }
-}
-
-} //namespace Annotate
diff -r 960caa92210d -r c1ee8282291d src/base/annotate.hh
--- a/src/base/annotate.hh      Thu Feb 26 19:29:16 2009 -0500
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Ali Saidi
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to