BPi-F3 RISCV开发板 - vector

K1的vlen=256,处理8个float的数据的时候,使用f32m2比f32m1有额外的开销,因为f32m2可以并行处理16个float数据。这个开销是不是可以避免的。因为可能对于各家厂商来说vlen的宽度是不一样的,但是软件上在移植的时候使用f32m2还是f32m1配置是固定的,虽然vlen不同都可以直接运行,但是性能可能降低

这个开销是不是可以避免的。

这个避免不了,配置了m2,硬件就会操作16个float

虽然vlen不同都可以直接运行,但是性能可能降低

是的,一份代码兼容不同平台,确实就无法兼顾到每个具体平台的性能了

感觉对软件来说不太友好,比如用vector实现memcpy,通常使用e8m8,使用了8个vreg,如果实际copy的长度没那么长,可能导致使用vector优化后的性能反而低了;
另一点K1 vlen=256,e8m8一次loop可操作256/8*8=256 bytes,如果需要copy的数据为260 bytes,那么需要第二次loop去处理tail的四个bytes,但是这次还是会操作8个vreg,会导致很大的开销,所以为了性能我们还是需要额外的代码去处理tail元素。