Hi Marc. Thanks for verifying on real hardware. We have a program in util/ called statetrace which I use for figuring out these sorts of issues. It runs the program in question on a real system under ptrace and compares many of the registers cycle by cycle with what M5 is getting. This would help you determine where things go off track.

There are a few drawbacks to using this tool though. First, since it compares execution instruction by instruction, everything has to line up exactly. You'll have to turn off address space randomization, make sure the environment variables and command line arguments (including file paths) are exactly the same, get information about files to match so IO is buffered the same, make the kernel version match in uname, and possibly add/remove any auxilliary vectors. There can't be any randomization in the code, and if there is it has to be synced between the real and simulated code. There's a blob of code the kernel links in which can also cause divergences in two ways. First, the actual code may change between versions of the kernel. Second, because the code is mapped read only, software breakpoints don't work. The implementation of ptrace in the kernel uses them, so if you single step into that blob, execution escapes and the program runs to completion. There are some hacks that should address that, but it's not perfect. Also, running under statetrace is slower than normal. I'm not sure if running to 5 billion instructions is practical. Also divergences in memory are not tracked. If a store stores the wrong thing or to the wrong place, you won't see it until a load accesses it. This is usually obnoxious to track down, but it can be done.

But if you do address all the possible divergences and get it to run, it should notice when execution diverges. That will give you a really good clue as to what's going wrong.

All this assumes that you're trying to debug a fixed binary. You could alternatively modify the benchmarks you're running and add debugging output, extra checks, etc., to try to narrow in on what the problem is.

I'm sure this sounds like more work than you were hoping for and its unfortunate things didn't just work for you, but if you're willing to track down the problem we'd really appreciate it. Sorry, thanks, and good luck!

Gabe

Quoting Marc de Kruijf <[email protected]>:

I apologize for the delay in resonding; I wanted to make sure that I didn't
experience these problems running on actual ARM hardware.  It appears that I
do not.

I found through experimentation that I only experience issues when I compile
with fp support beyond vfp2; I don't have problems for vfp2, but I do see
occasional runtime errors compiling for vfp3 and neon.  So, for instance, if
I give my gcc cross-compiler these options "-mfpu=vfpv3 -mfloat-abi=softfp",
I see some issues crop up (more information below).

I am simulating the first 5 billion instructions in ARM_SE mode for 17/19 of
the SPEC 2006 C/C++ benchmarks.  I use two different compilers, one is the
freely available CodeSourcery Lite GNU/Linux cross-compiler from
CodeSourcery, and the other is an LLVM-based cross compiler.  The LLVM
compiler uses the same CodeSourcery assembler, but generates different
machine code.

Below are the errors reported by each compiler.  The differences between
compilers are most likely due to different instruction choices, although it
may also have to with the limited simulation time (5B insts).  As I
mentioned, these issues don't appear with vfp2.

LLVM and CodeSourcery:
 444.namd (checksum failure)
462.libquantum (free of invalid pointer)
 482.sphinx3 (runtime error - illegal log base)
  LLVM only:
447.dealII (llegal page fault)

CodeSourcery only:
 445.gobmk (assertion failure)
 453.povray (version number mismatch)




On Sun, Apr 17, 2011 at 11:48 AM, Ali Saidi <[email protected]> wrote:


Specifically, could you provide us with exactly what you're running (SE vs.
FS), spec benchmark, compiler, options, etc.

Thanks,
Ali

On Apr 17, 2011, at 4:10 AM, Gabe Black wrote:

 Yes, they are fully supported. What problems are you seeing?

Gabe

On 04/16/11 20:52, Marc de Kruijf wrote:

Are ARM hardware floating point instructions fully supported in M5?  When I
compile with hardware FP I see problems running some SPEC2006 benchmarks
whereas I don't see the same problems when I compile using software FP.

 Thank you!
Marc


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


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



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




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

Reply via email to