Hi all,

I would really appreciate some reviews on these changes. This is something
that I know many in the development community (Andreas, Gabe, others) have
been asking for. Please take a look!

I think most changes are pretty straightforward. There is one change where
I would like some specific feedback on a good way to incorporate multiple
Ruby protocols into the SConscript (
https://gem5-review.googlesource.com/c/public/gem5/+/58443/2)

Hi Giacomo,

I dug into the idea you proposed a bit more today, and I'm pretty convinced
that it would be significant work.

It's possible to make a SimObject be part of a submodule of m5.objects.
However, the problem comes in the params. I don't think there's an easy way
to create two params/<simobject>.hh files for SimObjects which have the
same name.

Basically, we have a strong assumption in the SimObject generation code
that no two SimObjects will have exactly the same name. Extending this to
allow SimObjects with the same name would be quite a bit of effort. Right
now, I don't believe this effort is worth the benefit for this set of
changes.

Let me know what you think.

Cheers,
Jason

On Fri, Apr 1, 2022 at 7:48 AM Jason Lowe-Power <ja...@lowepower.com> wrote:

> Sounds like a good idea. But I don't know how to do this easily. All
> SimObjects are part of the m5.object module, and this is deeply embedded in
> many different parts of gem5.
>
> My best guess at how to do this would be to add a new type of SimObject
> which is not in m5.objects, but in a submodule. Then, we would also have to
> extend the Scons concept of "SimObject" and how scons creates the SimObject
> params files and the python m5.objects files. My initial thought is that
> this would be a lot more work. I could be wrong, though.
>
> If you have a specific idea on how to implement this, or if you can
> provide an implementation, I can try to integrate it with what I have done.
>
> Either way, it will require non-backwards compatible changes to configs to
> import the correct module or use the new names. I'm not sure the benefit is
> worth the investment, though.
>
> Let me know what you think :)
>
> Cheers,
> Jason
>
>
>
> On Fri, Apr 1, 2022 at 7:31 AM Giacomo Travaglini <
> giacomo.travagl...@arm.com> wrote:
>
>> Congrats to Jason and to everyone who’s making this possible!
>>
>>
>>
>> About the naming, I wonder if we could provide a different python module
>> per ruby protocol.
>>
>> That would allow us to avoid prefixing in favour of something like:
>>
>>
>> $from m5.objects.mi_example import L1Cache_Controller
>>
>>
>>
>> or
>>
>>
>> $from m5.objects.msi import L1Cache_Controller
>>
>>
>>
>> Kind Regards
>>
>>
>>
>> Giacomo
>>
>>
>>
>>
>>
>> *From: *Jason Lowe-Power via gem5-dev <gem5-dev@gem5.org>
>> *Date: *Thursday, 31 March 2022 at 18:43
>> *To: *gem5 Developer List <gem5-dev@gem5.org>
>> *Cc: *Jason Lowe-Power <ja...@lowepower.com>
>> *Subject: *[gem5-dev] Request for comments/reviews: Multiple Ruby
>> protocols in a single binary
>>
>> Hi all,
>>
>>
>>
>> For as long as gem5 has been gem5, you have had to build a different gem5
>> binary if you want to use a different Ruby protocol. Making it possible to
>> build multiple protocols has been on the roadmap for a long time (at least
>> as long as I've been involved with the project).
>>
>>
>>
>> I'm excited to say that we've been able to do this (finally), and we have
>> a set of changesets on gerrit for review/comments feedback.
>>
>>
>>
>> There are a couple of todo items before it's merged, and a couple of
>> user-facing changes that we could not find a way to make fully backwards
>> compatible. More on this below.
>>
>>
>>
>> Let me know what you think, and let me know if there are any questions!
>> I'm excited to see this get in for gem5-22.0.
>>
>>
>>
>> Changes: https://gem5-review.googlesource.com/q/topic:all-ruby-protocols
>>
>>
>>
>> *Non-backwards compatible changes:*
>>
>> Previously each SLICC protocol used the same names for the same machine
>> time. E.g., MI_example has an `L1Cache_Controller` and MSI has an
>> `L1Cache_Controller`. These names were automatically generated from the
>> MachineType (L1Cache) + "_Controller". Now, since we want to be able to
>> compile these two protocols at the same time, we need to make sure there
>> are no (python) name clashes. So, these have been renamed to have the
>> protocol name prepended onto the machine name (e.g.,
>> `MI_example_L1Cache_Controller`).
>>
>>
>>
>> For most people using Ruby, we can provide backwards compatibility. If
>> you simply instantiate the `L1Cache_Controller` in python, we can provide a
>> new factory function that does the "right" thing. However, if you inherit
>> from `L1Cache_Controller` to specialize the controller, this won't work.
>>
>>
>>
>> *The user-facing change is* if you have any local ruby protocol
>> configuration files which use inheritance with the controllers, you will
>> have to update the controller classes to use the name of the protocol
>> prepended on the controller name.
>>
>>
>>
>> We have updated all of the configurations that are in the gem5 repo. You
>> will see warnings if you use the old backwards-compatible names (including
>> with Ruby.py).
>>
>>
>>
>> The only other user-facing change (I think, reviewers, please point out
>> if I'm wrong), is that in places that `buildEnv["PROTOCOL"]` was used to
>> check the protocol that was built, you will now need to use
>> `getRubyProtocol` (also available in `m5.defines`). However, we are
>> currently supporting backwards compatibility here, but there will be no
>> warning when we drop backwards compatibility (I expect this to be in a
>> couple of releases).
>>
>>
>>
>> *To do items*
>>
>> - Correctly integrate this with scons (and the new kconfig). See
>> https://gem5-review.googlesource.com/c/public/gem5/+/58443 for a WIP
>> that needs to be updated.
>>
>> - Update the website. Assuming there are no major flaws in our
>> implementation, we will update the website soon (before the changes are
>> committed). The main updates are the two user-facing changes described
>> above, but I expect some updates to how Ruby/SLICC works as well.
>>
>> - Add another commit that checks if the protocol is in the list of built
>> protocols instead of a single protocol. I'm holding off on this one until
>> item #1 is complete. This will also include a new command-line parameter to
>> set the "main" protocol for backwards compatibility.
>>
>>
>>
>> Cheers,
>>
>> Jason
>>
>>
>> IMPORTANT NOTICE: The contents of this email and any attachments are
>> confidential and may also be privileged. If you are not the intended
>> recipient, please notify the sender immediately and do not disclose the
>> contents to any other person, use it for any purpose, or store or copy the
>> information in any medium. Thank you.
>>
>
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to