Hi Vilas,

 

You're correct that the older instructions will wait while the younger
instructions are squashing.  I just found it easier to code it that way.
However, I disagree that it may not be the correct behavior.  Depending on
your pipeline, it might be beneficial to have branches resolve as early as
possible, that way keeping the pipeline busy.  I would argue that's more
important than having your older instructions retire a few cycles earlier,
unless your ROB is very full and squashing takes many cycles.  It really
depends on your pipeline though.

 

As far as the dispatch stalls, yes, that's how it was coded.  Again it was
easier to code that way.  Initially I thought that it might not be a big
deal, because loads/stores are pretty common.  If the ldst queue was full,
you would only be able to issue a few instructions before being forced to
stall anyways.  However, I didn't anticipate the store buffer getting full
frequently and causing stalls; that may be a bit high overhead.
Unfortunately I don't have any of the 21264 documents in front of me, so I
can't answer whether or not that's what it does.  I'll look into it and get
back to you about it.

 

I hope this answers your questions,

 

Kevin

 

  _____  

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Vilas Sridharan
Sent: Thursday, March 08, 2007 10:14 AM
To: M5 users mailing list
Subject: [m5-users] Two O3 CPU behaviors

 

Hello again --

In working with the O3 CPU model in m5v2.0b2, I've noticed two slightly odd
behaviors that I wanted to confirm were intended.

The first question relates to commit.  Specifically, if an instruction is in
the ROB and ready to commit (an ALU op, say), and there is a younger
instruction that needs to be squashed (a store that had a memory dependence
violation, for example), the squash will prevent the older instruction from
committing.  Thus, the older instruction sits at the head of the ROB for
potentially many cycles while younger instructions are squashing. 

Is this intended behavior?  This is the way it's coded (it handles squashing
before trying to commit, regardless of the age of the inst), but it doesn't
seem correct to me;  I would think that the older instruction should commit
before the squash is handled for the younger inst. 

The second question is regarding dispatch, and I just want to make sure that
the CPU model is behaving as intended.  I've noticed that dispatch stalls on
a full ldst queue regardless of the type of instruction that is trying to
dispatch.  Is this how the 21264 behaved?  It seems that it could continue
dispatching non-memory reference instructions, at the very least.  This
stalling behavior can lead to an odd situation where the back end of the
machine is completely empty (empty IQ, ROB, etc) except for the Store
Buffer, which is backed up with committed stores (this is how I noticed it,
anyway). 

Thanks!

   -Vilas

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

Reply via email to