This might seem like a silly question, but I am adding some code to the memory controller to profile which "cpu" is responsible for each memory access. In doing this, I've added a map of line addresses to cpu numbers in System.C. In the squencer, I have added code that adds an entry to the map when MakeRequest is called, and one to remove entries when hitCallback is called. I have also added code in MemoryControl.C to check this map to query which cpu missed in the cache. However, I am getting multiple memory requests at the memory controller that don't match any entries in the map. I've added code to output what the lineaddress is of every request issued to ruby, and none are even remotely similar to the ones I'm seeing, so it seems unlikely it's an issue of a request wanting multiple lines from the memory.
This makes me wonder if any other structures inside Ruby can accept memory requests, or can generate prefetch requests etc internally. I can't figure out where these requests are coming from, and it's quite frustrating. The requests that miss in the map are relatively rare, but there are still 1000s of them that occur when I just simulate for a few million cycles.
I'm using the MOESI_CMP_directory_m protocol for these tests.
Phil
|