I never actually wrote programs with risc-v vectors instructions, only for other ISA, so you seems to have much more experience than me on on that. Thanks for sharing your experience, and for the discussion.
> "multiple" doesn't imply "not fixed".
But in the case of risc-v, it really is "not fixed".
For example, can you tell me the number of cycle it takes to execute this instruction: `vadd.vv v3, v1, v2` ?
Another example, in your implementation of memcpy:
```
0: 86aa mv a3,a0
0000000000000002 <.L1^B1>:
2: 00267757 vsetvli a4,a2,e8,m4,d1
6: 12058007 vlb.v v0,(a1)
a: 95ba add a1,a1,a4
c: 8e19 sub a2,a2,a4
e: 02068027 vsb.v v0,(a3)
12: 96ba add a3,a3,a4
14: f67d bnez a2,2 <.L1^B1>
16: 8082 ret
```
From what I understand, you can't tell how long each vlb.v or vsb.v will take on a given processor,
as it depend on the number of elements that will be returned in a4.
The last iteration of the loop for example will probably take less time than the others,
because the instructions will only have to load and store the trailing part of the data.
> If you look at the result of a vectorised memcpy() I did on the D1, you can see that the execution time is absolutely identical at 30.9 ns (31 clock cycles at 1.008 GHz) from sz=0 to sz=64
Again, I'm not arguing against the efficiency of RISC-V vector extension. I'm sure any processor designer will be able to implement it as efficiently as if the instructions were closer to the raw compute logic.
I'm not even arguing against the extension. If anything, I think I would prefer if an open CISC ISA was gaining popularity as an open source platform instead of RISC-V, because it would have the same portability implications, but with smaller code size and memory footprint, and while leaving a lot of room for innovation and optimization on the actual design.
What I actually argue against is calling it a RISC ISA, because while the core of the ISA is RISC, this vector extension is not.