Skip to content

Conversation

@kunpai
Copy link
Contributor

@kunpai kunpai commented Mar 24, 2025

This is a model of a statically-scheduled circuit-switched NoC for superconductors.
Modeled off the SRNoC paper by Michelogiannakis et al.

This is a model of a statically-scheduled circuit-switched
NoC for superconductors.
Modeled off the SRNoC paper by Michelogiannakis et al.
Copy link
Member

@powerjg powerjg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see almost no comments. You need to add comments to this code.

Feel free to use AI to help you, but you have to have comments.

kunpai added 12 commits March 25, 2025 10:35
Comments for better code understandability added.
License added.
Test Script for SRNoC model
One additional time slot for zero.
Also, event added to show when a packet is delivered within
a connection window.
Hotspot and All-to-All

Not integrated as selectable options yet
Move hardware constants out of model into Python script.
Delays are now model parameters.
Refactor formula stats of power and area out.
Packets per window is a histogram.
Also, minor change to Param description
in SuperNetwork to align with default.
Fixed a bug where the simulation exited before
the last packet was delivered.
Frequency now affects time slot and
connection window.
Now, destination is computed in the network event
If it is allowed, send it.
If not, push it into the buffer and send when
allowed.
Layer send packets based on scheduling
Network now has a vector of Layers
Config script also changed to reflect this change
Removed some unused commented code
Changed year on license from 2022 to 2025
DPRINTF output to show layer number.
Multiple dynamic ranges, which dictate number
of layers.
Payload Specific delay had a small bug in it.
kunpai added 15 commits April 3, 2025 23:11
If max packets is -1, then the model generates and delivers infinite packets
Multiple layers did not follow maximum packets
Fixed it by making exit simulation at the network level
Layers inform the network when they are done processing
When all layers reach maximum packets, exit
Crosspoint delay, merger delay etc. are now part of
a Layer.
Random and hotspot are currently supported.
Implemented via enums and exposed function
in Layer to set the traffic mode.
Edited main SRNoC config script to accept traffic
mode as well.
Providing a file input loads a schedule from that file.
Fixed a bug where the last packet was not fully delivered
before exiting the simulation.
Rename .cc and .hh files to match gem5 specifications.
Changed some local variables to snake case as well.
Removed some unused commented code.
Made sure all arguments are being parsed correctly.
Also, fixed if __name__=='__main__' to
'__m5_main__'.
Cleaned code; removed unused functions.
Renamed variables to follow gem5 naming conventions.
According to SRNoC paper, a connection window is
setup time + RL time slots + hold time

Updated scheduling to reflect the above.
Timing was made more accurate based on the SRNoC paper
One DataCell schedules to all other DataCells
Stresses bisection bandwidth
Stat tracks the missed packets per cell
Apostrophe style changed for consistency
Random payload generation within range of values possible
kunpai added 15 commits April 15, 2025 23:53
Dynamic range updated to RL Time Slots to reflect paper semantics
Also, RL Time Slots also dictate maximum packets sent in a window,
implemented that behavior
Parameters like delays of components like crosspoint,
splitter, merger, etc. are configurable.
The above decide the length of a time slot.
According to the paper, 8 time slots of 92 ps, make
the frequency of the network 1.4 GHz. This makes sense,
as 736 ps time period is roughly 1.4 GHz.
So, given configurable frequencies, the Layer computes
the max range of values and the max packets sent
per window.
Multiple frequencies can be defined to make multiple
Layers.
DataCell is no longer an accurate name,
since data is generated by the scheduler.
If timeSlot is greater than clockPeriod, fatal because no values
can be sent on that Layer
More accurate; shows correct behavior from
the paper as well
Paper indicates we can send more than 1 value in a window
between a src and a dest. Only caveat being they need to
be DISTINCT values.
Add stat to track the attempted communications and latency
Fix bug with maximum communications possible in a window
Since communications in SRNoC do not have headers & flits,
values is the more accurate term.
Latency tracking (in buffer + network delay)
No buffer mode; does not store in a buffer at all
Config script accepts a --no-buffer arg
Bug was with sending multiple values from one src to a
dest. Fixed it to cap at number of rlTimeSlots in a
connection window.
Using the above concept, we can reach a target number
of messages per second.
This is done as a param to control the injection rate
for nearest neighbor and all-to-all
kunpai added 5 commits May 22, 2025 16:33
Removed no buffer mode bool and collapsed its functionality onto the
buffer depth param
Resolve merge conflicts after pulling origin/SRNoC.
Collapses noBufferMode into bufferDepth=0 for un-buffered mode and
updates configs/supernetwork/SRNoC.py, Layer.py, layer.hh, layer.cc.
Based on a parameter, we can either set a raw number or a fraction of the srcs
to be active FOR SOURCE SENDING.
Destinations are all still fully active.
There is also a boolean that can determine if these active sources should be
sequential or if they can be random.
Also, right now I am using a hard-coded seed to make sure the random sources
are the same.
Perhaps might consider setting seed through a parameter later.
Move it out of mutually exclusive parser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants