Hi Magnus,
What inputs are you using for the benchmarks? I don't recall this
happening, but they haven't been tested extensively, so it wouldn't be a
huge surprise if this happened when you use different input sizes or
numbers of processors. The Tru64 pthreads library (like the Linux
pthreads library) has a "manager" thread in addition to the application
threads. In order to keep the m5 support manageable, we don't create a
manager thread (because then you'd have N+1 threads trying to run on
only N CPUs). If the application ever gets into the situation where all
the worker threads are waiting on the manager thread then you're hosed.
We don't see that happen under SPLASH (since they're pretty simple in
their use of threads) but it could be you've run into a situation where
that's happening.
I don't believe it's possible to build a cross-compiler for Tru64 Alpha
binaries; at least we've never been able to. Thus unless you have a
native Tru64 Alpha machine you can't really generate new binaries for
the existing SPLASH support.
Unfortunately supporting Linux pthreads in SE mode is even harder than
under Tru64 (and the situation with Tru64 is that my goal was to support
pthreads but I gave up partway through, which is why it's kind of a
mess). This question comes up a lot, so if you're interested you can
probably find more detailed answers in the mailing list archive.
Actually this question comes up often enough that I'm just going to
create a wiki page for it:
http://www.m5sim.org/wiki/index.php/Splash_benchmarks
The bottom line is that you're probably best off running with Linux
pthreads in FS mode.
Steve
Magnus Jahre wrote:
Hi,
I’m using the precompiled Splash benchmarks for M5 version 1.1 and the
SE mode. The problem is that many of these benchmarks eventually
deadlock. I have traced the problem to the synchronization functions in
alpha_tru64_process.cc. Here, all processors end up calling the
m5_cond_waitFunc() method and they all suspend. The really bad thing is
that if you simulate for a fixed number of clock cycles, it is very
difficult to see that something has gone wrong.
I’ve added the following code to the end of the m5_cond_waitFunc()
method to detect the problem:
if(process->waitList.size() == process->numCpus()){
fatal("We have a deadlock");
}
Have you seen this problem before?
I think it might be a problem with the thread library. However, I have
not been able to look into this as I do not have a working cross
compiler. Have you been able to build a cross compiler for the Splash
benchmarks and the thread libraries?
Regards,
Magnus Jahre
_______________________________________________
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