cd /home/luoyue/project/kernel_c/matmul_ame
make clean
make CLANG="$AME_CLANG" LLVM_OBJDUMP="$AME_OBJDUMP"
make verify CLANG="$AME_CLANG" LLVM_OBJDUMP="$AME_OBJDUMP"
FPGA bin 加载/入口地址为 0x86400000,UART MMIO 地址为 0x10000000。
matmul_ame 也支持 gem5 bare-metal 目标:
cd /home/luoyue/project/kernel_c/matmul_ame
make gem5 CLANG="$AME_CLANG" LLVM_OBJDUMP="$AME_OBJDUMP"
make verify-gem5 CLANG="$AME_CLANG" LLVM_OBJDUMP="$AME_OBJDUMP"
make run-gem5 CLANG="$AME_CLANG" LLVM_OBJDUMP="$AME_OBJDUMP" \
GEM5_ROOT=/home/luoyue/project/gem5-main \
GEM5_CPU_TYPE=AtomicSimpleCPU
RISC-V AME/RVV C 算子复现仓库
本仓库收集一组可独立构建、验证和运行的 RISC-V C 算子实现,当前覆盖三类路径:
matmul_amematmul_ame、LMHead_ame、QKVProjection_ame、CrossAttention_ame、SelfAttention_ame、ScaledDotProduct_ame、ProjectionEmbeddingHead_ame、Transpose_ameadd、mul、softmax、gelu、rms_norm、rope、Conv2D、SiLU/Swish、GLU/SwiGLU、LayerNorm、Pooling、Concat/Split、TokenEmbedding、PositionEmbedding、PatchEmbedding/ConvStem、Gather/Slice、Reshape/View、Transpose每个算子目录都自带源码、测试、
Makefile和子目录 README。当前工作区保留了已生成的 ELF/bin、QEMU 日志或 gem5 输出;这些都是生成物,后续可用对应目录的make clean清理后重新生成。Operator List
matmul_ame/build/models_ame_matmul_fpga.bin、build/gem5/models_ame_matmul_gem5.elfLMHead_ame/build/lm_head_ame_gem5.elfQKVProjection_ame/build/qkv_projection_ame_gem5.elfCrossAttention_ame/build/cross_attention_ame_gem5.elfSelfAttention_ame/build/self_attention_ame_gem5.elfScaledDotProduct_ame/build/scaled_dot_product_ame_gem5.elfProjectionEmbeddingHead_ame/build/projection_embedding_head_ame_gem5.elfTranspose_ame/build/transpose_ame_gem5.elfadd_rvv/build/rvv_addmul_rvv/build/rvv_mulsoftmax_rvv/build/rvv_softmaxgelu_rvv/build/rvv_gelurms_norm_rvv/build/rvv_rms_normrope_rvv/build/rvv_ropeConv2D_rvv/build/rvv_conv2dSiLU_rvv/build/rvv_siluGLU_rvv/build/rvv_gluLayerNorm_rvv/build/rvv_layernormpooling_rvv/build/rvv_poolingconcat_split_rvv/build/rvv_concat_splitTokenEmbedding_rvv/build/rvv_token_embeddingPositionEmbedding_rvv/build/rvv_position_embeddingPatchEmbedding_ConvStem_rvv/build/rvv_patch_embedding_convstemgather_slice_rvv/build/rvv_gather_sliceReshape_View_rvv/build/rvv_reshape_viewTranspose_rvv/build/rvv_transposeRepository Layout
典型 AME/gem5 目录结构:
典型 RVV/QEMU 目录结构:
Recommended Environment
当前工作区使用的本机路径:
已验证过的工具链组合:
基础依赖:
工具链检查:
matmul_ame/Makefile会优先尝试~/opt/llvm-project-riscv/build/bin下的 clang/llvm-objdump;其它部分历史 AME 目录仍保留旧机器上的默认CLANG/LLVM_OBJDUMP路径。推荐在命令行统一覆盖:Run RVV Operators in QEMU
RVV 算子使用发行版
riscv64-linux-gnu-gcc静态交叉编译,并使用qemu-riscv64用户态运行。默认 QEMU CPU 为:通用命令:
例如:
make run会运行 QEMU 并生成build/*_qemu.log;make verify会检查 RISC-V ELF、关键 RVV 指令和 PASS 结果。RVV 目录当前只保留 QEMU 用户态运行目标,不再提供 gem5 SE
run_gem5目标。Build AME / AME+RVV gem5 ELFs
gem5 bare-metal 算子使用 RuyiAI clang 编译,入口地址为
0x80000000。通用构建命令:make verify通常会检查:0x80000000mlae8.m、mlbe8.m、mqma.b.mm、msce32.mvsetvli、vfred*、vse32.v.word或 inline asm大多数 AME/gem5 目录只提供
make verify目标,用于生成并静态检查 ELF。当前额外提供运行目标的目录是:Transpose_ame:make run/make run-gem5matmul_ame:make gem5/make verify-gem5/make run-gem5对没有
run-gem5目标的目录,可用同一 gem5 命令模板运行对应 ELF:多数 AME+RVV 测试成功运行时 UART 结尾为:
Transpose_ame的 UART 结尾是单行PASS;matmul_ame的完整回归结束后会输出ALL PASS。Build AME Matmul FPGA Bin
matmul_ame使用 AME 扩展指令,包括msettile*、mlae8.m、mlbe8.m、msce32.m、mqma.b.mm等。Ubuntu 官方 clang 通常不支持这些扩展,需要使用 RuyiAI LLVM fork。构建 RuyiAI clang:
生成 FPGA bin:
主要产物:
FPGA bin 加载/入口地址为
0x86400000,UART MMIO 地址为0x10000000。matmul_ame也支持 gem5 bare-metal 目标:gem5 主要产物和日志位置:
完整 UART 回归包含 20 个用例:Decode
101-108、Prefill201-210、Sequence batch-vs-noblk301、GEMV compatibility alias401。Current Verification Summary
当前工作区中保留的验证痕迹:
build/*_qemu.log,日志可确认PASS。0x80000000:LMHead_ame、QKVProjection_ame、CrossAttention_ame、SelfAttention_ame、ScaledDotProduct_ame、ProjectionEmbeddingHead_ame、Transpose_ame、matmul_ame/build/gem5/models_ame_matmul_gem5.elf。Transpose_ame/build/m5out_transpose_ame/system.platform.terminal保留 7/7 case 的PASS运行日志。matmul_ame/build/models_ame_matmul_fpga.bin已生成;当前保留的matmul_ame/build/m5out_matmul_gem5/system.platform.terminal是未完整结束的 gem5 输出,已显示 case101-203通过,文件末尾停在 case204开头。如需确认完整 20-case 回归,请重新运行make run-gem5。Common Issues
clang: unknown argumentorinstruction requires ... XBOSCAME当前 clang 不包含或没有正确启用 RuyiAI AME 扩展。请使用 RuyiAI LLVM fork,并确认
CLANG指向该 clang:gem5 does not exit
gem5 bare-metal 算子的
platform/crt_uart.S使用:作为
m5_exit。请确认使用的是本仓库对应目录下的platform/文件,以及 custom RISC-V AME/RVV gem5。QEMU does not support RVV CPU properties
确认使用支持 RVV 1.0 的
qemu-riscv64。本仓库验证使用 QEMU 11.0.0:cannot find -lgccor missing RISC-V headersIndependence Notes
Makefile只读取本目录的src、include、tests和platform。Makefile只读取各自目录下的实现、测试和公共头。