On Thu, 27 Jan 2011, Steve Reinhardt wrote:
On Thu, Jan 27, 2011 at 5:24 AM, Nilay Vaish <ni...@cs.wisc.edu> wrote:
I tested my hypothesis yesterday. About 90% of the messages have
destination count = 1. I think, for such messages, we should avoid going
through the entire routing table. Instead, we should also keep a mapping
from destination to set of output links and use that mapping for routing.
That makes a lot of sense to me.
Steve
I implemented this approach. But it did not improve the performance. So I
tried to explore what could be the cause. The function
PerfectSwitch::wakeup() contains three loops.
loop on number of virtual networks
loop on number of incoming links
loop till all messages for this (link, network) have been routed
I am working with an 8 processor mesh network and run ruby_random_test.py
for 400,000 loads. About 11-12% of the time is taken by this function,
which is the highest amongst all the functions. I moved the third loop to
another function. I found that the wakeup function is itself called about
76,000,000 times, number of messages processed is about 81,000,000. Out of
these about 71,000,000 have destination count = 1. Surprisingly the inner
loop, that I had separated out as a function, was called 3,600,000,000
times. That is about 45 times per invocation of the wakeup function, when
each invocation of the wakeup function processes just about one message.
When is the wakeup function called? Is it called in a periodic fashion? Or
when a message needs to routed? Is it possible that instead of looking at
all the virtual networks and links, we look at only those that have
messages that need routing?
--
Nilay
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev