0

我希望你能帮助我解决我的 RISC-V 问题。

我目前正在试验对 RISC-V 的向量 (RVV) 指令的工具链支持。根据我在互联网上找到的信息,该规范目前冻结在 v1.0。GCC 有一个支持 RVV,但它不再被积极维护。另一方面,LLVM 支持 RVV。

所以我继续设置了一个 Docker 容器,其中包含:RISC-V 工具(Repo at basic-rvv)、spike(最新提交)和 LLVM(最新提交)。

接下来,我使用以下命令编译了一个sgemm 示例clang -march=rv32gcv --target=riscv32 --sysroot=/usr/local/riscv32-unknown-elf --gcc-toolchain=/usr/local -O2 sgemm.c -o sgemm.elf:该命令成功运行,我得到一个 elf 文件,使用 objdump 看起来不错:它使用向量指令。

现在到我的问题:之后,我想用指令集模拟器尖峰验证二进制文件。因此,我运行了: spike /usr/local/riscv32-unknown-elf/bin/pk sgemm.elf,最终执行了一条非法指令(完整的错误消息见下文)。以下 OP 失败:0xb2905457. echo "DASM(0xb2905457)" | spike-dasm我用-->解码了指令vfmacc.vf v8, v9, ft0,这对我来说很好。

我已经浏览了spike的代码,以及为什么它可能会失败,但我迷路了。

也许你知道这里出了什么问题?我感觉我的矢量单元配置错误(setvl说明)。我希望你们能在这方面给我一些支持!

首先十分感谢!蒂姆

来自尖峰的错误消息:

bbl loader
z  00000000 ra 000103cc sp 7ffffd70 gp 00020810
tp 00000000 t0 00000020 t1 bf06fb33 t2 00000000
s0 00020090 s1 00020b54 a0 00000004 a1 00020000
a2 00020010 a3 00000004 a4 00020b94 a5 0000001c
a6 bfed957a a7 00020b94 s2 00000000 s3 00000000
s4 00000000 s5 00000000 s6 00000000 s7 00000000
s8 00000000 s9 00000000 sA 00000000 sB 00000000
t3 3ea13dab t4 bf4b3713 t5 3ea6844f t6 3fdfe3d3
pc 000103ea va/inst b2905457 sr 80006620
An illegal instruction was executed!
4

0 回答 0