Hello-
I'm using MESI_SCMP_bankdirectory protocol. I am trying to experiment
with direct cache-to-cache transfer (without going through the
directory) based on predictions.
As a first step, I'm trying to model a "perfect" predictor, by simply
looking at the directory (for free) to locate the L1 cache that has
the line in E state. I managed to get this information, but I am
having trouble actually sending the request through the network.
I suspect that the network isn't setup to handle direct cache-to-cache
traffic. In MESI_SCMP_bankdirectory-L1cache.sm, I only see
MessageBuffer/s setup to/from L2 bank, nothing to/from other L1
caches. I did try sending a message (destined for one of the L1
caches) through "requestFromL1Cache" MessageBuffer, but I get the
following error:
---------------------------------------------------------------------------------
Warning: in fn void MessageBuffer::enqueue(const MsgPtr&, Time) in
buffers/MessageBuffer.C:210: *this is [MessageBuffer: [PrioHeap: ]]
Warning: in fn void MessageBuffer::enqueue(const MsgPtr&, Time) in
buffers/MessageBuffer.C:211: m_name is
Fatal Error: in fn void MessageBuffer::enqueue(const MsgPtr&, Time) in
buffers/MessageBuffer.C:212: Ordering property of this queue has not
been set
---------------------------------------------------------------------------------
As far as I can tell, this means the MessageBuffer isn't setup
correctly - the setOrder() is called at the initialization time for
all the MessageBuffer/s that will be used in the experiment.
For now, I can assume something like a crossbar (2D mesh would be more
realistic but I expect more trouble in that direction).
I guess my question is: how would one go about setting up stuff like
this? Is there some pre-built routines in network/ that I can use to
do this?
Thanks,
Byn
|