gem5-dev@gem5.org

The gem5 Developer List

View all threads

Garnet code flow

O
Olumide
Sat, Nov 2, 2024 4:50 PM

Hello gem5-devs,

gem5 newbie here.

I'm reading the gem5 source and I find line 119 of SwitchAllocator.cc[1]
confusing. Why call m_router->getInputUnit(inport) in the inner loop
even though the variable inport does not appear to have changed?

Also, I find the first line of the code flow README[2] difficult to parse.

CODE FLOW

  • NetworkInterface.cc::wakeup()
    • Every NI connected to one coherence protocol controller on one

end, and one router on the other.

Does this mean that every NI is by definition "connected to one
coherence protocol controller on one end, and one router on the other",
or do the following steps apply only to NIs that are "connected to one
coherence protocol controller on one end, and one router on the other"?

Regards,

  • Olumide

[1]
https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/SwitchAllocator.cc#L119

[2]
https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/README.txt#L16

Hello gem5-devs, gem5 newbie here. I'm reading the gem5 source and I find line 119 of SwitchAllocator.cc[1] confusing. Why call `m_router->getInputUnit(inport)` in the inner loop even though the variable `inport` does not appear to have changed? Also, I find the first line of the code flow README[2] difficult to parse. > CODE FLOW > - NetworkInterface.cc::wakeup() > * Every NI connected to one coherence protocol controller on one end, and one router on the other. Does this mean that every NI is by definition "connected to one coherence protocol controller on one end, and one router on the other", or do the following steps apply only to NIs that are "connected to one coherence protocol controller on one end, and one router on the other"? Regards, - Olumide [1] https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/SwitchAllocator.cc#L119 [2] https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/README.txt#L16
SB
Srikant Bharadwaj
Sat, Nov 2, 2024 5:17 PM

Hi Olumide,
You are correct getInputPort doesn’t need to be in inner loop. It got
trickled in a commit where we were moving to smart pointers.

Yes, by definition every network interface is connected to a protocol
controller on one end. The network configuration automatically creates the
Network interfaces. You can then connect them to routers using topology
files.

Srikant

On Sat, Nov 2, 2024 at 11:51 AM Olumide via gem5-dev gem5-dev@gem5.org
wrote:

Hello gem5-devs,

gem5 newbie here.

I'm reading the gem5 source and I find line 119 of SwitchAllocator.cc[1]
confusing. Why call m_router->getInputUnit(inport) in the inner loop
even though the variable inport does not appear to have changed?

Also, I find the first line of the code flow README[2] difficult to parse.

CODE FLOW

  • NetworkInterface.cc::wakeup()
    • Every NI connected to one coherence protocol controller on one

end, and one router on the other.

Does this mean that every NI is by definition "connected to one
coherence protocol controller on one end, and one router on the other",
or do the following steps apply only to NIs that are "connected to one
coherence protocol controller on one end, and one router on the other"?

Regards,

  • Olumide

[1]

https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/SwitchAllocator.cc#L119

[2]

https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/README.txt#L16


gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-leave@gem5.org

Hi Olumide, You are correct getInputPort doesn’t need to be in inner loop. It got trickled in a commit where we were moving to smart pointers. Yes, by definition every network interface is connected to a protocol controller on one end. The network configuration automatically creates the Network interfaces. You can then connect them to routers using topology files. Srikant On Sat, Nov 2, 2024 at 11:51 AM Olumide via gem5-dev <gem5-dev@gem5.org> wrote: > Hello gem5-devs, > > gem5 newbie here. > > I'm reading the gem5 source and I find line 119 of SwitchAllocator.cc[1] > confusing. Why call `m_router->getInputUnit(inport)` in the inner loop > even though the variable `inport` does not appear to have changed? > > Also, I find the first line of the code flow README[2] difficult to parse. > > > CODE FLOW > > - NetworkInterface.cc::wakeup() > > * Every NI connected to one coherence protocol controller on one > end, and one router on the other. > > Does this mean that every NI is by definition "connected to one > coherence protocol controller on one end, and one router on the other", > or do the following steps apply only to NIs that are "connected to one > coherence protocol controller on one end, and one router on the other"? > > Regards, > > - Olumide > > > [1] > > https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/SwitchAllocator.cc#L119 > > [2] > > https://github.com/gem5/gem5/blob/stable/src/mem/ruby/network/garnet/README.txt#L16 > _______________________________________________ > gem5-dev mailing list -- gem5-dev@gem5.org > To unsubscribe send an email to gem5-dev-leave@gem5.org >