Hi,
I have a question regarding using recycle() on mandatory queues
(Processor -> L1). One thing that I noticed from many of the protocols
that ships with GEMS is that, in an L1 line is in a pending state, say
IS for MESI_SCMP_bankdirectory protocol, subsequent Load or Store
requests are recycled, i.e. MessageBuffer::recycle(). My question is,
how is the original program order maintained in such implementation?
Say there were multiple requests to the same line issued by the
(aggressive) processor: LD, ST, LD. The first LD will cause a
transition to IS state, and subsequent ST and LD will be recycled
until the reply for the GETS comes back. Once that comes back, let's
say we go to S state. At that point, as far as I can tell, there is no
mechanism that would ensure the partial ordering that exist between
the ST and the second LD. So, isn't it possible that the
implementation would process the second LD and then ST, which would be
a violation of the original program ordering?
Byn
|