As long as the CPU IDs are distinct then it shouldn't matter that the
thread IDs are all zero... the load locked/store conditional code
requires both to match before it considers the request as coming from
the same place.
Can you tell from the trace that there's a point inside mutex_lock()
where all of your cpus do LLs to the same address followed by SCs, and
all of the SCs succeed? This would be definitive evidence that there's
a problem with LL/SC. Other than that it's just a guess that this is
where the problem lies.
Also, what happens if you run with AtomicSimpleCPU, and with or without
a single level of caches?
Steve
Jiayuan Meng wrote:
Hi Ali,
Thanks for the quick responce.
I am having a master thread spawning child threads on multiple cpus.
Once a thread gets allocated to a cpu, it always resides there (so far).
I am using AtomicTimingCPU. In my test case with racing mallocs,
I have five CPUs(with id from 0 to 4). A master threads initially runs
on cpu0. When it comes to a pseudo instruction, it tells the simulator
to spawn four child threads on the other CPUs. Each CPU only uses one
thread context(all have the id 0 by default). Will this be a
problem? I'll try assigning different thread IDs.
To create threads, I learned from "stack_createFunc" and
"init_thread_context" in kern/tru64/tru64.hh, basically allocate a new
stack, and assigns the pc and sp register. A major difference might be
that I am not using pthreads. instead, I inserted a new pseudo
instruction which "atomically" creates four threads on the other four
CPUs, they start to execute at the same cycle.
I actually extended SimpleCPUs to have multiple thread contexts and the
CPU can switch among them. They are tested with the splash2 FFT
benchmark and things went fine. But to make the test more clear, I just
set each CPU to have exactly one thread context. In the future, I may
need to "migrate" a running thread context from one CPU to another.
I'm in trouble now... I wonder how splash2 gets around with this in SE mode?
Thanks again!
Jiayuan
----- Original Message -----
*From:* Ali Saidi <mailto:[EMAIL PROTECTED]>
*To:* M5 users mailing list <mailto:m5-users@m5sim.org>
*Sent:* 2007年6月16日 2:41 AM
*Subject:* Re: [m5-users] synchronization primitives in SE mode
The Alpha ISA has a load locked and a store conditional instruction
which we support. Again I don't know exactly what you're doing to
create your threads, but you need to make sure that their cpu/thread
ids are unique. Are you scheduling each thread on it's own cpu or
are they moving around?
Ali
On Jun 15, 2007, at 1:30 PM, Jiayuan Meng wrote:
Hey all,
By using the --trace-flags=Exec debug tool, I found that there is
a race condition in the malloc function in my multithreaded
program. However, when looking into the malloc.c in the glibc, it
said it is a thread-safe version. I also noticed that in
malloc/arena.c, it uses mutex_lock(), which seems to be a
spinlock. This may still be problematic if several threads are
accessing the lock simultaneously.
So, what kind of synchronization support does M5 have in SE mode?
Does it have store-conditional or test-and-set instructions or
I'll have to add one myself?
Thanks!
Jiayuan
------------------------------------------------------------------------
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
------------------------------------------------------------------------
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users