Skip to content
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

Multi-channel Ramulator + GEM5 #69

Open
arkhadem opened this issue Oct 21, 2024 · 0 comments
Open

Multi-channel Ramulator + GEM5 #69

arkhadem opened this issue Oct 21, 2024 · 0 comments

Comments

@arkhadem
Copy link

Hi everyone,

I have integrated Ramulator2 as the back-end memory simulator of the Gem5. I need 8 channels of DDR4 3200, each with 25.6 GB/s bandwidth. Ramulator's Gem5 wrapper is connected to a memside port of the membus crossbar of the GEM5, with ~102.4GB/s bandwidth for each memside port.

One way to implement this, as the default implementation behaviour, is to handle the channel concept on the Ramulator side, which is to set the number of memory channels to 1 in the GEM5, and set the number of channels in the Ramulator's config file to 8. However, because in this implementation there will be only 1 memside port connected to the Ramulator, the memory bandwidth will be limited by ~102.4GB/s, much less than 8 x 25.6 = 204 GB/s of 8 DDR4 3200 channels.

The correct implementation is to handle memory channels on the Gem5 side by having 8 memside ports of membus connected to 8 instances of the Ramulator, each configured by 1 channel. With this implementation, I get this error:

RuntimeError: logger with name 'Ramulator::GenericDRAMSystem' already exists

Another concern with this approach is address mapping. The memory config (configs/common/MemConfig.py) default behaviour of GEM5 has this line of code:

# The default behaviour is to interleave memory channels on 128 # byte granularity, or cache line granularity if larger than 128 # byte. This value is based on the locality seen across a large # range of workloads. intlv_size = max(opt_mem_channels_intlv, system.cache_line_size.value)

which means that it uses the LSBs for channel interleaving, which is compatible with the RoBaRaCoCh address mapper. What if we need to use other address mapping schemes?

I appreciate your help,

  • Alireza
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

No branches or pull requests

1 participant