mem: different HMC configuration
Review Request #3373 - Created March 11, 2016 and submitted
| Information | |
|---|---|
| Abdul Mutaal Ahmad | |
| gem5 | |
| Reviewers | |
| Default | |
In this new hmc configuration we have used the existing components in gem5 mainly [SerialLink] [NoncoherentXbar]& [DRAMCtrl] to define 3 different architecture for HMC.
Highlights
1- It explores 3 different HMC architectures
2- It creates 4-HMC crossbars and attaches 16 vault controllers with it. This will connect vaults to serial links
3- From the previous version, HMCController with round robin funtionality is being removed and all the serial links are being accessible directly from user ports
4- Latency incorporated by HMCController (in previous version) is being added to SerialLink
Current version only works for traffic generator setup {can be extended for full-system and system-emulation}
How to run it
from you gem5 home directory run the following commands
build/ARM/gem5.opt configs/example/hmctest.py --mem-type=HMC_2500_x32 --mode=RANDOM --arch=same
build/ARM/gem5.opt configs/example/hmctest.py --mem-type=HMC_2500_x32 --mode=RANDOM --arch=distributed
build/ARM/gem5.opt configs/example/hmctest.py --mem-type=HMC_2500_x32 --mode=RANDOM --arch=mixedDependency
This patch required another tester patch to be applied before running the test
http://reviews.gem5.org/r/3374/
Dear Abdul,
I disagree with breaking the crossbar into 4 smaller crossbar, because I am quite sure that this is not how it works in the HMC.
Maybe if you could modify the crossbar into a hierarchical-crossbar with non-uniform access latencies to the local and non-local quadrants that would make much more sense.
However having 4 independent crossbars not correct, and will limit the functionality of the serial links: Chaining of multiple HMC devices won't be possible because the address ranges of the serial links would be different. Also link power down cannot be implemented, because again links deliver different address ranges.Finally, about the "round robin" HMC controller. Again I disagree with removing it. Because something should be there to connect 1 host to more than one serial link. It would be great if you could provide a better implementation for an HMC controller. But I believe that this component is necessary otherwise the model won't be an HMC device anymore.
Thank you,
Change Summary:
In this version, we have added comments and references to previous work. Also each vault in HMC is configured to have different memory range.
Diff: |
Revision 2 (+320 -99) |
|---|
Change Summary:
Serial Link model has been updates with link speed. The latency over a serial link is calculated using link_speed and num_lanes. This is done because we want to keep the Serial Link as one component and which models both controller latency + serial (serDes) latency. The clock in this case is the controller frequency.
Diff: |
Revision 3 (+340 -106) |
|---|
Thanks for getting these out! However, there are a few low-level issues, and some funky wiring that goes on here.
-
configs/common/HMC.py (Diff revision 3) -
present
-
configs/common/HMC.py (Diff revision 3) -
covers
-
configs/common/HMC.py (Diff revision 3) -
access complete
-
configs/common/HMC.py (Diff revision 3) -
What is the significance of "modified" here?
-
configs/common/HMC.py (Diff revision 3) -
spurious space
-
configs/common/HMC.py (Diff revision 3) -
What is the unit here?
-
configs/common/HMC.py (Diff revision 3) -
spaces around operators.
-
configs/common/HMC.py (Diff revision 3) -
are these three cases not the same?
-
configs/common/HMC.py (Diff revision 3) -
I am not sure I understand the special case, here.
-
configs/common/HMC.py (Diff revision 3) -
merge these two
-
configs/common/HMC.py (Diff revision 3) -
loop and lists of buffers?
-
configs/common/HMC.py (Diff revision 3) -
who wires up things if arch == 1? Please also add the arch descriptions inthe comments.
-
src/mem/SerialLink.py (Diff revision 3) -
unit?
-
src/mem/serial_link.hh (Diff revision 3) -
unit?
-
src/mem/serial_link.cc (Diff revision 3) -
where do you actually increase the packet size?
A
Change Summary:
changed the logic of linking crossbars within loops, added more comments
Diff: |
Revision 5 (+301 -104) |
|---|
Hi Abdul, The code is now more compact after your recent updates and additional comments help. A few style and readability issues still remain, but getting there. Radhika
-
configs/common/HMC.py (Diff revision 5) -
Is this param used?
-
configs/common/HMC.py (Diff revision 5) -
Purely for readability, how about xbar_buffer_size_* instead of cross_buffer_size_*?
-
configs/common/HMC.py (Diff revision 5) -
space around operator
-
configs/common/HMC.py (Diff revision 5) -
Here and elsewhere in the changed lines: space around operators (, = == etc.)
Also, 0 is the default start for the range function. -
configs/common/HMC.py (Diff revision 5) -
Pass meaning 'do nothing' instead of None meaning 'no object'. You could do if i != j instead of placing the work in the else clause?
-
configs/common/HMC.py (Diff revision 5) -
Can these two params be set during instantiation of the Bridge objects, and only set the ranges inside this loop? But do retain the comment currently there for the None statement.
Change Summary:
changed the run script
Testing Done: |
|
|---|
Good to go from my side after addressing the minor comment. But I think a few more people should review it too.
-
configs/common/HMC.py (Diff revision 6) -
Change the arch option names.
