Thank you very much Mitch and Ashish for your responses. You have been most helpful. :)

Zeb


On 4/26/2013 11:15 AM, Mitch Hayenga wrote:
++ to this likely just being an issue of reading the wrong stat. I've personally diffed every instruction on a small run of libquantum (though on ARM).

You can always implement a "poor man's checker" to execute two gem5 cpu models in lock-step, verifying the committed instruction path (assuming single-threaded SE). This is how I brought up and verified my own cpu model in gem5.

Step 1) Add a DPRINTF (with a new trace flag) at commit that simply prints out the instruction being committed on the various CPU models you wish to compare.

DPRINTF(CommitInst, "Committing instruction [pc:%#x (%d)].%s\n",
                             pcState.instAddr(),
                             pcState.microPC(),
 curStaticInst->disassemble(pcState.instAddr()).c_str());

Step 2) Create 4 fifos in the gem5 output directory (m5out)

        >> cd m5out
        >> mkfifo cpu1_fifo1
        >> mkfifo cpu1_fifo2
        >> mkfifo cpu2_fifo1
        >> mkfifo cpu2_fifo2

Step 3) Write a small perl/python script that just strips off the cycle time info from the output
        #!/usr/bin/perl -w

        while(<>) {
          if (/.*(Committing.*)/) {
             print "$1\n"
          }
        }

Step 4) Run two instances of gem5 (with different CPUs) outputting to their respective "fifo1"

./build/ARM/gem5.opt --debug-flag=CommitInst --trace-file=cpu1_fifo1 configs/example/se.py --cpu-type=timing --cmd=462.libquantum -o "15 2" ./build/ARM/gem5.opt --debug-flag=CommitInst --trace-file=cpu2_fifo1 configs/example/se.py --cpu-type=detailed --cmd=462.libquantum -o "15 2"

Step 5) Filter both of these output fifos through the script from step 3 into the second fifo

        ./parse.pl <http://parse.pl> m5out/cpu1_fifo1 > m5out/cpu1_fifo2
        ./parse.pl <http://parse.pl> m5out/cpu2_fifo1 > m5out/cpu2_fifo2

Step 6) Diff/compare the two fifos. Once you execute this command, both instances of gem5 will run in lock-step. If any instruction committed is different the program will stop, showing the line number (equivalent to the committed micro-op) where execution differed.

        cmp m5out/cpu1_fifo2 m5out/cpu2_fifo2


This is an "easy" way to verify two gem5 cpu models are committing the exact same sequence of instructions without generating huge trace files.

On Thu, Apr 25, 2013 at 10:29 PM, Ashish Venkat <[email protected] <mailto:[email protected]>> wrote:

    Hi Zeb,

    If you want to compare the number of instructions committed in O3 vs
    atomic, compare the following 2 stats:
    O3: cpu.commit.commitCommittedInsts
    Atomic: cpu.num_insts (which goes into sim_insts)
    These two should generally be equal.

    The cpu.committedInsts (which goes into sim_insts) in O3 gives you the
    number of committed instructions excluding NOPs and prefetch
    instructions.  I think that explains the difference.

    -Ashish

    On Wed, Mar 13, 2013 at 8:30 AM, Zebulun Barnett
    <[email protected] <mailto:[email protected]>> wrote:
    > tl;dr Detailed cpu borked? --prog-interval borked? definitely :(
    >
    > Greetings,
    >
    > My research group has recently started using Gem5 (coming from
    m5) and we
    > have noticed an anomaly with the Alpha SE Detailed(O3) CPU
    model. Of the 4
    > types of CPU available (Atomic, Detailed(O3), Timing, InOrder)
    all but the
    > Detailed model take the exact same number of instructions to
    complete a
    > benchmark. The Detailed CPU consistently requires less
    instructions (about
    > %10 less) to complete a given benchmark. Multiple benchmarks
    have indicated
    > the same result. We are aware that the main difference between
    the Detailed
    > CPU and the others is that it is an out-of-order processor. Is
    it possible
    > this is the cause of the difference? Is it simply handling the
    instructions
    > more efficiently?
    >
    > During our testing, we attempted to use fast forwarding to convince
    > ourselves that the different CPU types actually did commit a
    different
    > number of instructions. In, libquantum, one of the benchmarks in
    which we
    > noticed this behavior, the atomic cpu commits ~289 million
    instructions
    > while the detailed cpu commits ~269 million instructions. With fast
    > forwarding (using the atomic cpu and switching to the detailed
    model at 200
    > million instructions) the total number of instructions committed
    is ~282.
    > This number convinces us that the detailed model indeed commits
    a different
    > amount of instructions than the other types.
    >
    > Also, during the fast forward test, we set --prog-interval to
    1,000,000
    > instructions. The interval behaved normally up to the switch,
    but once the
    > detailed CPU took over, it started reporting the same value
    every time. Each
    > printout after the switch was stuck at 2,000,001 instructions
    and the
    > committed instruction value was 0. However, the simulation
    completed as if
    > it committed all instructions successfully. We will submit a bug
    report for
    > this specific issue, but if anyone else has experienced this,
    please let us
    > know.
    >
    > If these are well-known or obvious issues, I apologize in
    advance for
    > wasting your time. Let it be known that I did search the
    archives to no
    > avail.
    >
    > Any insight would be most appreciated.
    >
    > Thank you,
    > Zeb Barnett
    >
    > -----
    > Student Research Assistant
    > High Performance Computer Lab
    > Lamar University
    >
    >
    >
    >
    >
    > CONFIDENTIALITY: Any information contained in this e-mail (including
    > attachments) is the property of The State of Texas and unauthorized
    > disclosure or use is prohibited. Sending, receiving or forwarding of
    > confidential, proprietary and privileged information is
    prohibited under
    > Lamar Policy. If you received this e-mail in error, please
    notify the sender
    > and delete this e-mail from your system.
    >
    > _______________________________________________
    > gem5-users mailing list
    > [email protected] <mailto:[email protected]>
    > http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
    _______________________________________________
    gem5-users mailing list
    [email protected] <mailto:[email protected]>
    http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users




_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to