Hi Dean,
My answers are inline.
- Tushar
On 03/22/2012 05:31 PM, Dean Michael Ancajas wrote:
Hi Tushar,
Thanks for the prompt reply. I have a follow up
question/clarifications though. Let's say I have successfully
deflected a HEAD_ flit to a different output port (from what was
calculated in the RC stage) all the BODY_ and TAIL_ flits will
automatically follow right since they would use the same input VC? At
least that is how I understood the code in InputUnit_D::wakeup().
As long as you make sure that the new output port is updated in the
"route" variable in that VC after the head deflects, the BODY and TAIL
will follow that same output port.
Another question is, if we have deflected a flit to a non-optimal
path, is there a way to update its new path without diving into the
details of how the path is embedded into the message during the
NetworkInterface::flitisize ( ) part? What I would want to do is
update the shortest path to the source that is embedded in the
flit/network message based on its current deflected location. If I
don't update the path/NetDest inside the flit i think it would just go
back to the router where it came from since that would be the only
node that would match in its routing table.
Hmm depends. Suppose a flit could go out of N or E for minimal routing
(and E had been computed by RC for XY routing). You deflected it out of
S. Now at the new router, it can either go out of N to come back to the
old router, or it can go out of E. I think it will go out of E if XY
routing is enforced (if you use a Mesh, all X links have a weight of 1
and Y links have a weight of 2 to enforce XY routing).
But on the other hand, if a flit could only go out of N and you
deflected it to W, S or E, it will come back to the same router.
cheers!
dean
On Thu, Mar 22, 2012 at 12:40 PM, Tushar Krishna <[email protected]
<mailto:[email protected]>> wrote:
Hi Dean,
The OutputUnit does not wake up when the flit has to leave the
router (it only wakes up to receive credits).
It is the switch that wakes up and schedules the output link.
The SWallocator_d removes winning flits from their respective
input VCs and places them in the switch buffer.
The Switch_d reads from the switch buffer and pushes flits into
the out_buffer of the particular output unit.
The NetworkLink_d wakes up and reads flits out of the output buffers.
If you want to implement locking, I think you will need changes in
the SwitchAllocator_d where input flits place requests for output
ports and output ports arbitrate among these requests.
You need ensure that an output port only favors packets of the
same input VC, before it can serve other VCs/ports.
The Switch and Link are dumb units that just transfer flits.
- Tushar
On 03/22/2012 09:47 AM, Dean Michael Ancajas wrote:
Hi,
I want to implement deflection routing in garnet. At the
InputUnit_d::wakeup() I lock the output port of the router
(everytime a HEAD flit or HEAD_FLIT_ is encountered) so that no
other flit will be scheduled thru this output port. My question
is, when do I release the lock? Is it in the
OutputUnit_d::wakeup() when a TAIL flit is about to traverse the
link (i.e. when it puts the flit on the network link)?
-dean
_______________________________________________
gem5-users mailing list
[email protected] <mailto:[email protected]>
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
[email protected] <mailto:[email protected]>
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users