Right, what I need is to prevent the reordering of stores. The stores should
be executed in program order, the oldest store must be executed before a
younger store is allowed to execute.
Using O3 cpu and SPARC_SE.

When the following code is put before 'store_inst->initiateAcc();'
in LSQUnit<Impl>::executeStore(..) :

if (store_idx != storeHead) {
     memDepViolator = storeQueue[storeHead].inst;
     ++lsqMemOrderViolation;
     return genMachineCheckFault();
}


The following happens:


M5 Simulator System

Copyright (c) 2001-2008
The Regents of The University of Michigan
All Rights Reserved


M5 compiled Jan 25 2011 12:47:37
M5 revision 4c0f7929ee33+ 7842+ default tip
M5 started Jan 25 2011 12:47:44
M5 executing on bellatrix
command line: ./build/SPARC_SE/m5.fast configs/teste.py -n 2 -b Helloworld
-d
Global frequency set at 1000000000000 ticks per second
0: system.remote_gdb.listener: listening for remote gdb on port 7000
0: system.remote_gdb.listener: listening for remote gdb on port 7001
info: Entering event queue @ 0.  Starting simulation...
panic: Tried to access unmapped address 0x8.
 @ cycle 9577000
[invoke:build/SPARC_SE/arch/sparc/faults.cc, line 654]
Memory Usage: 189360 KBytes
For more information see: http://www.m5sim.org/panic/5932f339
Program aborted at cycle 9577000
Aborted


In addition, I also tried not setting the store instruction as executed when
a reordering case is detected in DefaultIEW<Impl>::executeInsts() :

...
fault = ldstQueue.executeStore(inst);

if(ldstQueue.violation(inst->threadNumber)){
// Don't set as executed
activityThisCycle();
} else ....


And this happens:

M5 Simulator System

Copyright (c) 2001-2008
The Regents of The University of Michigan
All Rights Reserved


M5 compiled Jan 25 2011 13:21:18
M5 revision 4c0f7929ee33+ 7842+ default tip
M5 started Jan 25 2011 13:21:25
M5 executing on bellatrix
command line: ./build/SPARC_SE/m5.fast configs/teste.py -n 2 -b Helloworld
-d
Global frequency set at 1000000000000 ticks per second
0: system.remote_gdb.listener: listening for remote gdb on port 7000
0: system.remote_gdb.listener: listening for remote gdb on port 7001
info: Entering event queue @ 0.  Starting simulation...
Exiting @ tick 9223372036854775807 because simulate() limit reached


What can I do to prevent the reordering?

Thanks,

--
Eberle


On Tue, Jan 25, 2011 at 12:37 PM, Steve Reinhardt <ste...@gmail.com> wrote:

> Apparently not...
>
> When you say "it didn't work", what do you mean?  Maybe if you ask some
> more specific questions it will be easier for us to provide some clues.
>
> Steve
>
> On Tue, Jan 25, 2011 at 5:36 AM, Eberle <rambo.u...@gmail.com> wrote:
>
>> Any ideas?
>>
>> On Fri, Jan 21, 2011 at 5:00 PM, Eberle <rambo.u...@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> How can I enforce the reordering restriction between stores in the O3
>>> (W->W restriction)? To make an store to be executed only after all stores
>>> issued before it were executed.
>>>
>>> I tried adding this condition in the executeStore method in
>>> lsq_unit_impl.hh, but it didn't work:
>>>
>>> if (store_idx != storeHead) {
>>>  memDepViolator = storeQueue[storeHead].inst;
>>>         return genMachineCheckFault();
>>>     }
>>>
>>>
>>>
>>> Thanks,
>>>
>>> --
>>> Eberle Rambo.
>>>
>>>
>>
>> _______________________________________________
>> m5-dev mailing list
>> m5-dev@m5sim.org
>> http://m5sim.org/mailman/listinfo/m5-dev
>>
>>
>
> _______________________________________________
> m5-dev mailing list
> m5-dev@m5sim.org
> http://m5sim.org/mailman/listinfo/m5-dev
>
>
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to