[Gems-users] mandatory queue recycle() and program order


Date: Tue, 8 Dec 2009 14:27:30 -0600
From: Byn Choi <bynchoi1@xxxxxxxxxxxx>
Subject: [Gems-users] mandatory queue recycle() and program order
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
[← Prev in Thread] Current Thread [Next in Thread→]