Re: [m5-dev] Restricting W-W reordering in O3

2011-02-14 Thread Korey Sewell


 But I need to find the point to log order of completion of loads and stores
 in the LSQ (between LSQ and L1 cache), to check the effect of that change.
 I was observing inside LSQUnitImpl::completeDataAccess(PacketPtr pkt).
 But the order observed doesn't look like the expected.

Looks like you are going to have to check the TSO (?) semantics here. Whose
to say that if you issue a # of memory accesses in a particular order, that
they finish in a particular order? Isn't caching (and locality of your
memory accesses) going to determine this? Is it not OK that the memory
accesses are sent to the memory system in a certain order but arent
necessarily completed in a certain order? Again, you'll need to check the
TSO or whatever constraints you are trying to enforce for that case.


-- 
- Korey
___
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev


Re: [m5-dev] Restricting W-W reordering in O3

2011-02-09 Thread Eberle
Korey,

That idea of creating a fault was probably leading to a dead lock, as you
stated. Then, trying to stall the access as suggested, I added constraints
between stores in the Instruction Queue (actually inside MemDepUnit), where
only membar constraints were handled before. The simulator executed without
problems.

Code in MemDepUnitMemDepPred, Impl::insert(DynInstPtr inst)
...
} else {
producing_store = depPred.checkInst(inst-instAddr());
}

if (inst-isStore()  store) { // Add new constraint
if(producing_store == 0) {
  producing_store = storeSN;
 } else {
  producing_store = (storeSN  producing_store ? storeSN : producing_store);
 }
}
...

But I need to find the point to log order of completion of loads and stores
in the LSQ (between LSQ and L1 cache), to check the effect of that change.
I was observing inside LSQUnitImpl::completeDataAccess(PacketPtr pkt).
But the order observed doesn't look like the expected.

I wonder if I'm observing the right place...


Thank you,


--
Eberle.


On Tue, Feb 1, 2011 at 3:31 AM, Korey Sewell ksew...@umich.edu wrote:

 Are your changes:
 1) Causing the simulator to assert/panic/not function correctly.
 or
 2) Allowing the simulator to work but giving you unexpected results (bad
 stats, etc.?)

 If #2, it's a bigger picture issue and you'll need to add some debug
 statements in the code to make sure that stores are only seen in order (e.g.
 print out the sequence number for the instruction before a store is sent)

 If #1, you'll need to place some code blocking the store from going to the
 memory system. At some point, the instructions dependent on the store you
 just set to not executed  will need the values from that store, so unless
 you are setting the store to executed at some point then a deadlock sounds
 like a probable issue.

 But also, you need to find where there is a sendTiming call in the o3
 model or whatever function/code is executing the store and not execute it
 unless it's at the head of the queue. I havent looked at that code in
 awhile, so that's probably the best advice I could give for now, but judging
 from your last snippet, why would you need to create a fault if your store
 ordering is violated rather than just stall that access from
 initiating/executing/etc?

 I would think that the O3 has a choice of instructions to choose from in
 each IEW cycle, so why not just make the choice from the LSQ unavailable if
 something is out of order? What's the correct thing in HW to do there?

 Anyway, hope that helps...


 On Fri, Jan 28, 2011 at 12:12 PM, Eberle rambo.u...@gmail.com wrote:

 Steve, what about adding dependencies between stores in the Memory
 Dependency Unit, should it do the trick or needs other modifications?
 I've added the restrictions but the result wasn't the expected. Maybe I
 need to make more changes in other places?
 As I'm using SPARC, I'd need the processor to implement the TSO model, or
 at least for now, to not allow reordering between stores.


 Thanks in advance,

 --
 Eberle.



 On Tue, Jan 25, 2011 at 1:25 PM, Eberle rambo.u...@gmail.com wrote:

 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 LSQUnitImpl::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 1 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 DefaultIEWImpl::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 

Re: [m5-dev] Restricting W-W reordering in O3

2011-01-31 Thread Korey Sewell
Are your changes:
1) Causing the simulator to assert/panic/not function correctly.
or
2) Allowing the simulator to work but giving you unexpected results (bad
stats, etc.?)

If #2, it's a bigger picture issue and you'll need to add some debug
statements in the code to make sure that stores are only seen in order (e.g.
print out the sequence number for the instruction before a store is sent)

If #1, you'll need to place some code blocking the store from going to the
memory system. At some point, the instructions dependent on the store you
just set to not executed  will need the values from that store, so unless
you are setting the store to executed at some point then a deadlock sounds
like a probable issue.

But also, you need to find where there is a sendTiming call in the o3
model or whatever function/code is executing the store and not execute it
unless it's at the head of the queue. I havent looked at that code in
awhile, so that's probably the best advice I could give for now, but judging
from your last snippet, why would you need to create a fault if your store
ordering is violated rather than just stall that access from
initiating/executing/etc?

I would think that the O3 has a choice of instructions to choose from in
each IEW cycle, so why not just make the choice from the LSQ unavailable if
something is out of order? What's the correct thing in HW to do there?

Anyway, hope that helps...

On Fri, Jan 28, 2011 at 12:12 PM, Eberle rambo.u...@gmail.com wrote:

 Steve, what about adding dependencies between stores in the Memory
 Dependency Unit, should it do the trick or needs other modifications?
 I've added the restrictions but the result wasn't the expected. Maybe I
 need to make more changes in other places?
 As I'm using SPARC, I'd need the processor to implement the TSO model, or
 at least for now, to not allow reordering between stores.


 Thanks in advance,

 --
 Eberle.



 On Tue, Jan 25, 2011 at 1:25 PM, Eberle rambo.u...@gmail.com wrote:

 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 LSQUnitImpl::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 1 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 DefaultIEWImpl::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 1 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.comwrote:

 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 

Re: [m5-dev] Restricting W-W reordering in O3

2011-01-28 Thread Eberle
Steve, what about adding dependencies between stores in the Memory
Dependency Unit, should it do the trick or needs other modifications?
I've added the restrictions but the result wasn't the expected. Maybe I need
to make more changes in other places?
As I'm using SPARC, I'd need the processor to implement the TSO model, or at
least for now, to not allow reordering between stores.


Thanks in advance,

--
Eberle.


On Tue, Jan 25, 2011 at 1:25 PM, Eberle rambo.u...@gmail.com wrote:

 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 LSQUnitImpl::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 1 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 DefaultIEWImpl::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 1 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.comwrote:

 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


Re: [m5-dev] Restricting W-W reordering in O3

2011-01-25 Thread Eberle
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


Re: [m5-dev] Restricting W-W reordering in O3

2011-01-25 Thread Steve Reinhardt
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


Re: [m5-dev] Restricting W-W reordering in O3

2011-01-25 Thread Eberle
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 LSQUnitImpl::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 1 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 DefaultIEWImpl::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 1 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


[m5-dev] Restricting W-W reordering in O3

2011-01-21 Thread Eberle
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