有关项目

近日研究是否为浮点数进行了隐式类型转换导致的问题,但 spike 头文件中 f16_add() 的类型检查没问题,照理说不是。 提交了 fixed point 相关的 patch,float point实在是有点没办法了,先不写了,研究一下别的指令怎么添加。

RVV

vrgather

向量聚集指令从第一个源向量寄存器读取元素,位置由第二源向量寄存器组给出。第二向量寄存器的下标值按照无符号整型处理。源向量寄存器可以在任意小于 VLMAX 的下标处读取,无论 vl 的值是多少。写入目标寄存器的最大元素数量由 vl 给出,剩余超过 vl 的元素根据当前的 tail policy 处理。操作可以被 mask,inactive 的元素按照 mask undisturbed/agnostic policy 处理。

vrgather.vv vd, vs2, vs1, vm # vd[i] = (vs1[i] >= VLMAX) ? 0 : vs2[vs1[i]];
vrgatherei16.vv vd, vs2, vs1, vm # vd[i] = (vs1[i] >= VLMAX) ? 0 : vs2[vs1[i]];

尝试了一下在 RIF 里面实现 permutation 相关的指令。 golden 部分 spike 头文件中有读取元素位置的函数 P.VU.elt,RIF 的 processor.hpp 里面也要实现一个对应的,但是自动生成的头文件根据数组元素下标进行循环。需要添加另一个循环来遍历数组元素的每一个bit。添加的另一个循环不能出现在别的 operator 里面,所以 scripts 需要 needMerge attribute 来区分如何生成 computexxxOp.h。 vlmax 如何确定呢? 那么 Decoder.hpp 呢? 又或者说,直接按照 sew * vl 来计算即可? 这对吗?这不对吗?

宣传

近日去安徽大学和合肥工业大学进行了 如何上手 RISC-V 宣传。 根据在 whlug 获取的经验写的如何使用 riscv-gnu-toolchain、qemu和spike。 在安徽大学办的很小,中途少量几位同学参加,所以未能获取现场反馈,线上反馈说我讲得太浅,过于切题。 在合肥工业大学办的较大,但是问到其中一位同学的反馈时,表示不是很了解 RISC-V,回去先了解一下。 如果下次再办可能需要从 RISC-V 介绍起,或者有随时能根据受众不同,从不同目录讲起的超长 slides。 有关思考是,我上大学时,常常听说一个参加活动有学分的概念。作为一个原教旨参加活动体验更广阔世界的人来说,我更希望来参加活动是可以各取所需的,所以以后也会努力让自己的宣传更加受众广泛且有参与感。

C++

Tips

riscv-gnu-toolchain 项目中交叉编译 llvm, 默认为动态链接,运行程序会报 Cound not open '/lib/ld-linux-riscv64-lp64d.so.1': No such file or directory。需要在编译时加上静态链接的参数 -static 来静态链接才可以。