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
