-
Notifications
You must be signed in to change notification settings - Fork 19
misc: SRNoC model #279
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
kunpai
wants to merge
48
commits into
stable
Choose a base branch
from
SRNoC
base: stable
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
misc: SRNoC model #279
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This is a model of a statically-scheduled circuit-switched NoC for superconductors. Modeled off the SRNoC paper by Michelogiannakis et al.
powerjg
requested changes
Mar 25, 2025
Member
powerjg
left a comment
There was a problem hiding this 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.
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.
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
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
They were in the SRNoC paper.
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.
Closer to values seen in paper
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
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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a model of a statically-scheduled circuit-switched NoC for superconductors.
Modeled off the SRNoC paper by Michelogiannakis et al.