Yea, it's a little "Scary" because what I need to do is ensure the
instruction stat renames match the expected output pre-renaming.

Looks like I'll need a script to run all the regressions,  rename all the
stats for comparison, and then finally diff the stats. So that's the
gameplan!

If someone has a better way, let me know...

On Thu, Sep 3, 2009 at 12:53 PM, Gabe Black <[email protected]> wrote:

> I've done that once or twice, and I just start things up and let them
> run for a long time. Make sure you let more than one run in parallel if
> you do that. As for the patch itself, make sure you run the EIO
> regressions since those are finicky about what instruction count they
> see. Also, I notice you have a commented out line in one of the inorder
> files. You'll want to delete that line if you actually want it gone.
>
> Gabe
>
> Korey Sewell wrote:
> > Hey all,
> > when this patch is finished, it should end the naming confusion we had
> > across all the CPU models (with regards to multiple stats holding
> > instruction counts in O3 and then different names for commits in each
> > model).
> >
> > I put the count for committed insts in the BaseCPU along with the
> > calculations for IPC and CPI.
> >
> > I wanted to suppress the perThread stats in the case that it's <= 1
> > threads, but the only option for Stat suppression I see are "nozero"
> > or "nan" I think. Nate?
> >
> > If people agree on the names, then that would be the next step before
> > this is committed.
> >
> > Also, before I could commit this patch, it would have to be verified
> > across all regressions and then update all regressions. This would
> > take awhile and some automation would be preferred :). People have
> > done this sort of change which affects all regressions right? Any
> > scripts or ways that you used to speed up this process? Or better yet,
> > can I trust the finished handy dandy patch to someone who already has
> > this "update all stats" framework in place :) ????
> >
> > On Thu, Sep 3, 2009 at 11:25 AM, Korey Sewell <[email protected]
> > <mailto:[email protected]>> wrote:
> >
> >     # HG changeset patch
> >     # User Korey Sewell <[email protected] <mailto:[email protected]>>
> >     # Date 1251991492 14400
> >     # Node ID 2cbb826e9ca006cad820ba2be85eeea1da7fd2f9
> >     # Parent  e0c1c6d876499dc536cfdf0cd37736051f1fb760
> >     cpus: make commit count naming consistent across all cpus
> >     move all common cpu commit counts to base cpu
> >     -numInsts => total number of insts. committed
> >     -numInstsPerThread=> per thread instruction commits
> >
> >     a similar naming scheme is used for:
> >     cpi, cpiPerThread, ipc, and ipcPerThread
> >
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/base.cc
> >     --- a/src/cpu/base.cc   Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/base.cc   Thu Sep 03 11:24:52 2009 -0400
> >     @@ -246,12 +246,48 @@
> >      BaseCPU::regStats()
> >      {
> >         using namespace Stats;
> >     -
> >     +
> >         numCycles
> >             .name(name() + ".numCycles")
> >     -        .desc("number of cpu cycles simulated")
> >     +        .desc("Number of cpu cycles simulated")
> >             ;
> >
> >     +    numInsts
> >     +        .name(name() + ".num_insts")
> >     +        .desc("Number of instructions committed")
> >     +        ;
> >     +
> >     +    numInstsPerThread
> >     +        .init(numThreads)
> >     +        .name(name() + ".num_insts_per_thread")
> >     +        .desc("Number of instructions committed per thread");
> >     +
> >     +    cpi
> >     +        .name(name() + ".cpi")
> >     +        .desc("Cycles per instruction")
> >     +        .precision(6);
> >     +    cpi = numCycles / numInsts;
> >     +
> >     +    cpiPerThread
> >     +        .name(name() + ".cpi_per_thread")
> >     +        .desc("Cycles per instruction for each thread")
> >     +        .precision(6);
> >     +    cpiPerThread = numCycles / numInstsPerThread;
> >     +
> >     +
> >     +    ipc
> >     +        .name(name() + ".ipc")
> >     +        .desc("Instructions per cycle")
> >     +        .precision(6);
> >     +    ipc =  numInsts / numCycles;
> >     +
> >     +    ipcPerThread
> >     +        .name(name() + ".ipc_per_thread")
> >     +        .desc("Instructions per cycle for each thread")
> >     +        .precision(6);
> >     +    ipcPerThread =  numInstsPerThread / numCycles;
> >     +
> >     +
> >         int size = threadContexts.size();
> >         if (size > 1) {
> >             for (int i = 0; i < size; ++i) {
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/base.hh
> >     --- a/src/cpu/base.hh   Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/base.hh   Thu Sep 03 11:24:52 2009 -0400
> >     @@ -311,6 +311,24 @@
> >       public:
> >         // Number of CPU cycles simulated
> >         Stats::Scalar numCycles;
> >     +
> >     +    // Number of instructions committed by CPU
> >     +    Stats::Scalar numInsts;
> >     +
> >     +    /** Stat for the number of committed instructions per thread. */
> >     +    Stats::Vector numInstsPerThread;
> >     +
> >     +    /** Stat for the CPI */
> >     +    Stats::Formula cpi;
> >     +
> >     +    /** Stat for the CPI per thread. */
> >     +    Stats::Formula cpiPerThread;
> >     +
> >     +    /** Stat for the IPC */
> >     +    Stats::Formula ipc;
> >     +
> >     +    /** Stat for the IPC per thread */
> >     +    Stats::Formula ipcPerThread;
> >      };
> >
> >      #endif // __CPU_BASE_HH__
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/inorder/cpu.cc
> >     --- a/src/cpu/inorder/cpu.cc    Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/inorder/cpu.cc    Thu Sep 03 11:24:52 2009 -0400
> >     @@ -319,56 +319,6 @@
> >             .name(name() + ".smtCycles")
> >             .desc("Total number of cycles that the CPU was
> >     simultaneous multithreading.(SMT)");
> >
> >     -    committedInsts
> >     -        .init(numThreads)
> >     -        .name(name() + ".committedInsts")
> >     -        .desc("Number of Instructions Simulated (Per-Thread)");
> >     -
> >     -    smtCommittedInsts
> >     -        .init(numThreads)
> >     -        .name(name() + ".smtCommittedInsts")
> >     -        .desc("Number of SMT Instructions Simulated (Per-Thread)");
> >     -
> >     -    totalCommittedInsts
> >     -        .name(name() + ".committedInsts_total")
> >     -        .desc("Number of Instructions Simulated (Total)");
> >     -
> >     -    cpi
> >     -        .name(name() + ".cpi")
> >     -        .desc("CPI: Cycles Per Instruction (Per-Thread)")
> >     -        .precision(6);
> >     -    cpi = threadCycles / committedInsts;
> >     -
> >     -    smtCpi
> >     -        .name(name() + ".smt_cpi")
> >     -        .desc("CPI: Total SMT-CPI")
> >     -        .precision(6);
> >     -    smtCpi = smtCycles / smtCommittedInsts;
> >     -
> >     -    totalCpi
> >     -        .name(name() + ".cpi_total")
> >     -        .desc("CPI: Total CPI of All Threads")
> >     -        .precision(6);
> >     -    totalCpi = numCycles / totalCommittedInsts;
> >     -
> >     -    ipc
> >     -        .name(name() + ".ipc")
> >     -        .desc("IPC: Instructions Per Cycle (Per-Thread)")
> >     -        .precision(6);
> >     -    ipc =  committedInsts / threadCycles;
> >     -
> >     -    smtIpc
> >     -        .name(name() + ".smt_ipc")
> >     -        .desc("IPC: Total SMT-IPC")
> >     -        .precision(6);
> >     -    smtIpc = smtCommittedInsts / smtCycles;
> >     -
> >     -    totalIpc
> >     -        .name(name() + ".ipc_total")
> >     -        .desc("IPC: Total IPC of All Threads")
> >     -        .precision(6);
> >     -        totalIpc =  totalCommittedInsts / numCycles;
> >     -
> >         BaseCPU::regStats();
> >      }
> >
> >     @@ -1024,15 +974,10 @@
> >         thread[tid]->numInsts++;
> >
> >         // Count committed insts per thread stats
> >     -    committedInsts[tid]++;
> >     +    numInstsPerThread[tid]++;
> >
> >         // Count total insts committed stat
> >     -    totalCommittedInsts++;
> >     -
> >     -    // Count SMT-committed insts per thread stat
> >     -    if (numActiveThreads() > 1) {
> >     -        smtCommittedInsts[tid]++;
> >     -    }
> >     +    numInsts++;
> >
> >         // Check for instruction-count-based events.
> >         comInstEventQueue[tid]->serviceEvents(thread[tid]->numInst);
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/inorder/cpu.hh
> >     --- a/src/cpu/inorder/cpu.hh    Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/inorder/cpu.hh    Thu Sep 03 11:24:52 2009 -0400
> >     @@ -673,32 +673,6 @@
> >         /** Stat for total number of cycles the CPU spends descheduled.
> */
> >         Stats::Scalar idleCycles;
> >
> >     -    /** Stat for the number of committed instructions per thread. */
> >     -    Stats::Vector committedInsts;
> >     -
> >     -    /** Stat for the number of committed instructions per thread. */
> >     -    Stats::Vector smtCommittedInsts;
> >     -
> >     -    /** Stat for the total number of committed instructions. */
> >     -    Stats::Scalar totalCommittedInsts;
> >     -
> >     -    /** Stat for the CPI per thread. */
> >     -    Stats::Formula cpi;
> >     -
> >     -    /** Stat for the SMT-CPI per thread. */
> >     -    Stats::Formula smtCpi;
> >     -
> >     -    /** Stat for the total CPI. */
> >     -    Stats::Formula totalCpi;
> >     -
> >     -    /** Stat for the IPC per thread. */
> >     -    Stats::Formula ipc;
> >     -
> >     -    /** Stat for the total IPC. */
> >     -    Stats::Formula smtIpc;
> >     -
> >     -    /** Stat for the total IPC. */
> >     -    Stats::Formula totalIpc;
> >      };
> >
> >      #endif // __CPU_O3_CPU_HH__
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0
> >     src/cpu/inorder/inorder_cpu_builder.cc
> >     --- a/src/cpu/inorder/inorder_cpu_builder.cc    Sun Aug 23
> >     14:19:14 2009 -0700
> >     +++ b/src/cpu/inorder/inorder_cpu_builder.cc    Thu Sep 03
> >     11:24:52 2009 -0400
> >     @@ -36,7 +36,7 @@
> >      #include "cpu/static_inst.hh"
> >      #include "cpu/inorder/cpu.hh"
> >      #include "cpu/inorder/inorder_dyn_inst.hh"
> >     -#include "cpu/inorder/pipeline_traits.hh"
> >     +//#include "cpu/inorder/pipeline_traits.hh"
> >      #include "params/InOrderCPU.hh"
> >
> >      InOrderCPU *
> >     @@ -44,7 +44,7 @@
> >      {
> >         ThreadID actual_num_threads =
> >             (numThreads >= workload.size()) ? numThreads :
> >     workload.size();
> >     -
> >     +
> >         if (workload.size() == 0) {
> >             fatal("Must specify at least one workload!");
> >         }
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/o3/commit.hh
> >     --- a/src/cpu/o3/commit.hh      Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/o3/commit.hh      Thu Sep 03 11:24:52 2009 -0400
> >     @@ -451,8 +451,6 @@
> >         /** Updates commit stats based on this instruction. */
> >         void updateComInstStats(DynInstPtr &inst);
> >
> >     -    /** Stat for the total number of committed instructions. */
> >     -    Stats::Scalar commitCommittedInsts;
> >         /** Stat for the total number of squashed instructions
> >     discarded by commit.
> >          */
> >         Stats::Scalar commitSquashedInsts;
> >     @@ -469,8 +467,6 @@
> >         /** Distribution of the number of committed instructions each
> >     cycle. */
> >         Stats::Distribution numCommittedDist;
> >
> >     -    /** Total number of instructions committed. */
> >     -    Stats::Vector statComInst;
> >         /** Total number of software prefetches committed. */
> >         Stats::Vector statComSwp;
> >         /** Stat for the total number of committed memory references. */
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/o3/commit_impl.hh
> >     --- a/src/cpu/o3/commit_impl.hh Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/o3/commit_impl.hh Thu Sep 03 11:24:52 2009 -0400
> >     @@ -150,10 +150,7 @@
> >      DefaultCommit<Impl>::regStats()
> >      {
> >         using namespace Stats;
> >     -    commitCommittedInsts
> >     -        .name(name() + ".commitCommittedInsts")
> >     -        .desc("The number of committed instructions")
> >     -        .prereq(commitCommittedInsts);
> >     +
> >         commitSquashedInsts
> >             .name(name() + ".commitSquashedInsts")
> >             .desc("The number of squashed insts skipped by commit")
> >     @@ -174,17 +171,10 @@
> >         numCommittedDist
> >             .init(0,commitWidth,1)
> >             .name(name() + ".COM:committed_per_cycle")
> >     -        .desc("Number of insts commited each cycle")
> >     +        .desc("Number of insts committed each cycle")
> >             .flags(Stats::pdf)
> >             ;
> >
> >     -    statComInst
> >     -        .init(cpu->numThreads)
> >     -        .name(name() + ".COM:count")
> >     -        .desc("Number of instructions committed")
> >     -        .flags(total)
> >     -        ;
> >     -
> >         statComSwp
> >             .init(cpu->numThreads)
> >             .name(name() + ".COM:swp_count")
> >     @@ -902,14 +892,6 @@
> >                     // Set the doneSeqNum to the youngest committed
> >     instruction.
> >                     toIEW->commitInfo[tid].doneSeqNum =
> head_inst->seqNum;
> >
> >     -                ++commitCommittedInsts;
> >     -
> >     -                // To match the old model, don't count nops and
> >     instruction
> >     -                // prefetches towards the total commit count.
> >     -                if (!head_inst->isNop() &&
> >     !head_inst->isInstPrefetch()) {
> >     -                    cpu->instDone(tid);
> >     -                }
> >     -
> >                     PC[tid] = nextPC[tid];
> >                     nextPC[tid] = nextNPC[tid];
> >                     nextNPC[tid] = nextNPC[tid] +
> >     sizeof(TheISA::MachInst);
> >     @@ -1242,18 +1224,11 @@
> >      {
> >         ThreadID tid = inst->threadNumber;
> >
> >     -    //
> >     -    //  Pick off the software prefetches
> >     -    //
> >     -#ifdef TARGET_ALPHA
> >     -    if (inst->isDataPrefetch()) {
> >     -        statComSwp[tid]++;
> >     -    } else {
> >     -        statComInst[tid]++;
> >     -    }
> >     -#else
> >     -    statComInst[tid]++;
> >     -#endif
> >     +    // To match the old model, don't count nops and instruction
> >     +    // prefetches towards the total commit count.
> >     +    //if (!head_inst->isNop() && !head_inst->isInstPrefetch()) {
> >     +    cpu->instDone(tid);
> >     +    //}
> >
> >         //
> >         //  Control Instructions
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/o3/cpu.cc
> >     --- a/src/cpu/o3/cpu.cc Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/o3/cpu.cc Thu Sep 03 11:24:52 2009 -0400
> >     @@ -439,43 +439,6 @@
> >                   "to idling")
> >             .prereq(idleCycles);
> >
> >     -    // Number of Instructions simulated
> >     -    // --------------------------------
> >     -    // Should probably be in Base CPU but need templated
> >     -    // MaxThreads so put in here instead
> >     -    committedInsts
> >     -        .init(numThreads)
> >     -        .name(name() + ".committedInsts")
> >     -        .desc("Number of Instructions Simulated");
> >     -
> >     -    totalCommittedInsts
> >     -        .name(name() + ".committedInsts_total")
> >     -        .desc("Number of Instructions Simulated");
> >     -
> >     -    cpi
> >     -        .name(name() + ".cpi")
> >     -        .desc("CPI: Cycles Per Instruction")
> >     -        .precision(6);
> >     -    cpi = numCycles / committedInsts;
> >     -
> >     -    totalCpi
> >     -        .name(name() + ".cpi_total")
> >     -        .desc("CPI: Total CPI of All Threads")
> >     -        .precision(6);
> >     -    totalCpi = numCycles / totalCommittedInsts;
> >     -
> >     -    ipc
> >     -        .name(name() + ".ipc")
> >     -        .desc("IPC: Instructions Per Cycle")
> >     -        .precision(6);
> >     -    ipc =  committedInsts / numCycles;
> >     -
> >     -    totalIpc
> >     -        .name(name() + ".ipc_total")
> >     -        .desc("IPC: Total IPC of All Threads")
> >     -        .precision(6);
> >     -    totalIpc =  totalCommittedInsts / numCycles;
> >     -
> >         this->fetch.regStats();
> >         this->decode.regStats();
> >         this->rename.regStats();
> >     @@ -1400,8 +1363,8 @@
> >         // Keep an instruction count.
> >         thread[tid]->numInst++;
> >         thread[tid]->numInsts++;
> >     -    committedInsts[tid]++;
> >     -    totalCommittedInsts++;
> >     +    numInstsPerThread[tid]++;
> >     +    numInsts++;
> >
> >         // Check for instruction-count-based events.
> >         comInstEventQueue[tid]->serviceEvents(thread[tid]->numInst);
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/o3/cpu.hh
> >     --- a/src/cpu/o3/cpu.hh Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/o3/cpu.hh Thu Sep 03 11:24:52 2009 -0400
> >     @@ -726,18 +726,6 @@
> >         Stats::Scalar timesIdled;
> >         /** Stat for total number of cycles the CPU spends descheduled.
> */
> >         Stats::Scalar idleCycles;
> >     -    /** Stat for the number of committed instructions per thread. */
> >     -    Stats::Vector committedInsts;
> >     -    /** Stat for the total number of committed instructions. */
> >     -    Stats::Scalar totalCommittedInsts;
> >     -    /** Stat for the CPI per thread. */
> >     -    Stats::Formula cpi;
> >     -    /** Stat for the total CPI. */
> >     -    Stats::Formula totalCpi;
> >     -    /** Stat for the IPC per thread. */
> >     -    Stats::Formula ipc;
> >     -    /** Stat for the total IPC. */
> >     -    Stats::Formula totalIpc;
> >      };
> >
> >      #endif // __CPU_O3_CPU_HH__
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/simple/base.cc
> >     --- a/src/cpu/simple/base.cc    Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/simple/base.cc    Thu Sep 03 11:24:52 2009 -0400
> >     @@ -126,11 +126,6 @@
> >
> >         BaseCPU::regStats();
> >
> >     -    numInsts
> >     -        .name(name() + ".num_insts")
> >     -        .desc("Number of instructions executed")
> >     -        ;
> >     -
> >         numMemRefs
> >             .name(name() + ".num_refs")
> >             .desc("Number of memory references")
> >     diff -r e0c1c6d87649 -r 2cbb826e9ca0 src/cpu/simple/base.hh
> >     --- a/src/cpu/simple/base.hh    Sun Aug 23 14:19:14 2009 -0700
> >     +++ b/src/cpu/simple/base.hh    Thu Sep 03 11:24:52 2009 -0400
> >     @@ -177,14 +177,16 @@
> >         // number of simulated instructions
> >         Counter numInst;
> >         Counter startNumInst;
> >     -    Stats::Scalar numInsts;
> >
> >         void countInst()
> >         {
> >     +        // Increment counters
> >             numInst++;
> >     +        thread->funcExeInst++;
> >     +
> >     +        // Increment stats
> >             numInsts++;
> >     -
> >     -        thread->funcExeInst++;
> >     +        numInstsPerThread[0/*tid*/]++;
> >         }
> >
> >         virtual Counter totalInstructions() const
> >     _______________________________________________
> >     m5-dev mailing list
> >     [email protected] <mailto:[email protected]>
> >     http://m5sim.org/mailman/listinfo/m5-dev
> >
> >
> >
> >
> > --
> > - Korey
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > m5-dev mailing list
> > [email protected]
> > http://m5sim.org/mailman/listinfo/m5-dev
> >
>
> _______________________________________________
> m5-dev mailing list
> [email protected]
> http://m5sim.org/mailman/listinfo/m5-dev
>



-- 
- Korey
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to