Hi,

Before diving into details of the code, if there's interest from the
>>> community I can set up a meeting time for us all to get together on zoom to
>>> chat about details and the best way to work together.
>>>
>>
Yes, we at Rivos are also be interested in attending. It would be good if
we can unify towards a single RVV implementation for Gem5.

Jerin


On May 25, 2022 at 16:41:43, Jason Lowe-Power <ja...@lowepower.com> wrote:

> Hi Yang,
>
> On Sun, May 22, 2022 at 11:59 PM ksco <numbk...@gmail.com> wrote:
>
>> Hi Jason and others,
>>
>> We (the PLCT Lab) are delighted to receive the rapid feedback from the
>> community! And we are glad to see that there are so many contributors in
>> the open source community participating in the RVV support on gem5. We want
>> to give thanks and respectation to other contributors. We also hope to work
>> together with the community to advance the development of RVV support
>> faster and better.
>>
>> I think Zoom meetings are helpful for collaborative development, but our
>> English (especially speaking) is not so good, so there may be some
>> communication difficulties in the voice meeting. Maybe we can maintain
>> long-term communication over some IM? I think Slack is a good option, but
>> if you guys have any other preferred chat software, we'd love to use it too.
>>
>
> Great idea. We've been talking about using a platform like this. I'll try
> to set something up this weekend.
>
>
>>
>> We are honored that Jason believes collaboration should be based on our
>> implementation posted on Gerrit. We are currently developing on GitHub (
>> github.com/plctlab/plct-gem5), PRs are very welcome!
>>
>> As for the instruction support, it is true that the implementation of
>> RIVOS is more complete than our current implementation. We are very willing
>> to cooperate with RIVOS to complete the follow-up instruction
>> implementation.
>>
>> And as for the configuration support of VLEN, We hope to have some
>> discussion. We believe that it is necessary to make VLEN configurable. We
>> found that RIVOS has added support for it in the compilation phase. But we
>> think it might be better to support this configuration at runtime (via
>> python) as in Spike/QEMU. But we haven't yet found a way to do it. Is this
>> possible in gem5?
>>
>
> See
> https://github.com/darchr/gem5/commit/8e5ff326d9c6dca4320fb231e335c5f8dbcf1e93.
> It's not *quite* right, but the idea is there.
>
>
>>
>> And passing vtype/vl via PCState is indeed a better solution if it can
>> implement support for the Timing model without hacking the CPU code. We are
>> looking forward to further progress with this solution!
>>
>
> Great :). Please let me know if you run into any major hurdles. We're
> still working on a proof of concept to ensure the PCState solution works as
> well.
>
>
>>
>> We're honored that the test repo (
>> https://github.com/huxuan0307/riscv-vector-tests) has your praise. More
>> peer approval is required before integrating it in gem5-resources, we
>> think. At present, this repository is experimental and unsteady. And there
>> are still bugs to fix.  We're glad if this repo is helpful for your
>> development.
>>
>> In the next steps, we intend to focus on the development and improvement
>> of the unit tests repository (
>> https://github.com/huxuan0307/riscv-vector-tests) and continue to
>> explore the implementation of some new instruction formats under
>> microinstructions (such as Widening and Narrowing instructions). In the
>> future, we could have more discussions on division of cooperation. We hope
>> we don't have duplicate work in cooperative development.
>>
>
> A couple of quick and easy things to do here:
> - Create a dockerfile to compile the workloads (Hoa at UC Davis may have
> already done this, but I'm not sure).
> - Write up enough documentation in the README so that anyone can easily
> build these binaries (I think this is very close already).
> - Document which binaries work and which don't in gem5
>
> After those small things, I think we should go ahead and integrate these
> tests here:
> https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable.
> We can iterate on improving the tests and adding more there as well. We
> (here at UC Davis) can also help by creating the gem5 scripts necessary to
> run the tests.
>
> Cheers,
> Jason
>
>
>>
>> Thanks again to all the contributors!
>>
>> Regards,
>>
>> Yang Liu
>>
>> Jason Lowe-Power <ja...@lowepower.com> 于2022年5月21日周六 02:32写道:
>>
>>> Hi everyone,
>>>
>>> I'm super excited to see all of the activity around RISC-V vector
>>> instructions right now. However, it looks like there are a few different
>>> implementations being worked on, and it's a good idea to try to unify
>>> around a single implementation and work together to get to a point where
>>> everyone in the gem5 community can benefit from this support.
>>>
>>> Before going any further, I want to give a huge thanks to everyone that
>>> has been working on this and has made contributions to varying different
>>> implementations. I'm not going to try to name people (I'm certain I missed
>>> some in the cc line!), but I hope everyone knows that we appreciate their
>>> contributions to the project!
>>>
>>> Before diving into details of the code, if there's interest from the
>>> community I can set up a meeting time for us all to get together on zoom to
>>> chat about details and the best way to work together.
>>>
>>> Looking at the code (
>>> https://gem5-review.googlesource.com/c/public/gem5/+/59789) and the
>>> documentation (
>>> https://docs.google.com/document/d/1yUDPU9NvpKo1WM1WYfdx20_aXLnlHssUUsDYR4lu95Q/edit)
>>> recently submitted, I think there are many great things about this
>>> approach, and a couple of places that we should discuss potential ways to
>>> improve it.
>>>
>>> First, I think that using microcode is definitely the right way to
>>> enable configurable VLEN and to get timing memory accesses to work. Because
>>> of this, I believe that the code posted to gerrit is probably the best
>>> starting point for collaboration. Happy to hear other opinions, though.
>>>
>>> Note that the Rivos implementation on github (
>>> https://github.com/rivosinc/gem5/tree/rivos/dev/joy/initial_RVV_support)
>>> does not use microcoded instructions, so it only works in atomic mode.
>>> However, I believe this implementation may have more instructions
>>> implemented than the one on gerrit. Also, in this implementation the VLEN
>>> is a parameter of the ISA which allows users to configure the system
>>> dynamically (which is great!). We should try to find a way to merge these
>>> two implementations.
>>>
>>> Second, we should integrate the tests (
>>> https://github.com/huxuan0307/riscv-vector-tests) into gem5-resources
>>> ASAP. This is a fabulous contribution! Having tests for vector insts will
>>> enable much faster development.
>>>
>>> I would like to discuss one design decision in the gerrit code:
>>> Specifically how the vtype/vl is set in the decoder. Stalling the decoder
>>> to get the correct vtype/vl when vset*vl* is executed doesn't fit well with
>>> gem5's execution model, and it feels like a bit of a hack.
>>>
>>> I have an alternative proposal that I would like to hear your thoughts
>>> on.
>>> Instead of storing vtype/vl in the decoder, we could store it in the
>>> PCState. Then, the vset*vl* instruction would look a lot like a control
>>> instruction. At decode time, the next PC state could be set with some
>>> values (maybe wrong values, just like the next pc after a branch may be
>>> wrong) or if it is a vsetivli, then the next PC state would have the
>>> correct values. Then, the subsequent instructions could access the PC state
>>> to get the current vtype/vl.
>>>
>>> In the execute stage of the vset*vl*, it would set the next pc state
>>> correctly. The CPU models already check to see if the next PC is the same
>>> in execute as it was "predicted" in the decode stage (i.e., was the branch
>>> predicted correctly). We can leverage this to check to see if vtype/vl are
>>> correct. If not, the CPU models will simply squash and re-execute starting
>>> at the correct next pc (i.e., the next vector instruction will execute the
>>> correct vtype/vl after vset*vl* is executed). If we extend the branch
>>> predictor to predict the vtype/vl and use the "last" values, this should be
>>> correct a huge percentage of the time. Smarter methods could also be
>>> employed.
>>>
>>> While this may not be a particularly realistic way to implement a
>>> hardware version of RVV and vset*vl*, I think that it's probably the best
>>> way to model it in gem5 without creating a separate vector engine object
>>> which is decoupled from the CPU model.
>>>
>>> We have been working on a proof-of-concept for this here at UC Davis
>>> (see https://github.com/darchr/gem5/tree/hn/rvv-uop, though this is
>>> untested in timing mode right now). Do you all think this is a good way
>>> forward? Or, is there something that I'm missing about the decoder stalling?
>>>
>>> Cheers,
>>> Jason
>>>
>>
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org

Reply via email to