Hi,
  I am trying an optimization at the memory wherein I service two blocks of
cache simultaneously.
Suppose say block X is requested by LLC, dram_ctrl.cc now services block X
and block X+1, that is I attach both block X and block X+1 to the same
packet (pktX) and send it to LLC.

A case arises where a request for X+1 is generated by LLC in the meantime
(It can be in MSHR and could also have traveled to DRAM read queue).
I handle this case through these steps
1. I service that request (X+1) through the packet (pktX) [Only if (X+1) is
a read request]
2. Delete the corresponding mshr
3. Also I check at recvTimingResp where if a return packet for Block X+1
comes from DRAM, I simply delete it.

I am running into a peculiar case in coherent_bus.cc where the following
assert fails for some other totally unrelated block Z
"outstandingReq.find(pkt->req) == outstandingReq.end()"
This block Z when I trace back, I see is generated for the first time by
the LLC, so there is no way that membus would already have block Z request
in its outstanding request queue. I am clueless as to how it manifests
itself there!

Also if I put a check wherein I service block X+1 only if it's
corresponding mshr entry is not in service (!mshr->inService for block
X+1), I don't run into this problem.
Any pointers as to how go about debugging it will be of great help.

-- 


*thanks&regards*
*BISWABANDAN*
http://www.cse.iitm.ac.in/~biswa/

“We might fall down, but we will never lay down. We might not be the best,
but we will beat the best! We might not be at the top, but we will rise.”
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to