ncnn
ncnn copied to clipboard
intrinsic code 没有体现算法的原本的设计,是否有计划升级intrinsic code,并设置vset为ta mu
error log | 日志或报错信息 | ログ
Test_relu : 测试结果: -0.067289 exception: 0.667084
ReLU_riscv::forward_inplace() #if __riscv_vector
int n = size;
while (n > 0)
{
size_t vl = vsetvl_e32m8(n);
vfloat32m8_t _p = vle32_v_f32m8(ptr, vl);
vbool4_t _b = vmflt_vf_f32m8_b4(_p, .0f, vl);
_p = vfmul_vf_f32m8_m(_b, _p, slope, vl); //slope: float(float32_t)
vse32_v_f32m8(ptr, _p, vl);
ptr += vl;
n -= vl;
}
#else // __riscv_vector for (int i = 0; i < size; i++) { if (*ptr < 0) *ptr *= slope; ptr++; } #endif // __riscv_vector
context | 编译/运行环境 | バックグラウンド
clang 17 汇编代码: vsetvli a3, a3, e32, m8, ta, ma vle32.v v8, (a1) vle32.v v16, (a0) vmflt.vf v0, v8, fa5 vfmul.vv v8, v8, v16, v0.t vse32.v v8, (a1)
how to reproduce | 复现步骤 | 再現方法
- 用clang17编译ncnn RVV 版本;
- intrinsic代码没有显式设置为mu, 而mask=1的值后面也需要用到,目前只是处理了mask=0的值,mask=1的值需要保留原矩阵的值。那么intrinsic的code需要升级,或者改为嵌入汇编。
- 测试环境用spike,将spike的vset指令改为在ta ma的情况下对mask=1的数据置0. 只对mask=0值进行处理。
more | 其他 | その他
### Tasks
https://github.com/Tencent/ncnn/pull/5642
rvv 1.0 更改在这里,但是需要等待上游 xtheadvector 相关问题修复