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元素。
使用K1板卡在测试使用vector c intrinsic接口优化的fft算法时,发现在算法中加入不影响算法的打印或者fence.i指令,算法结果正确,不加任何printf和fence.i时,代码结果错误,vector指令执行中存在时序的问题吗?
目前还没碰到过类似问题,如果能提供一个简化用例用于复现的话,我们可以排查下