目录

Nanhu Linux DDR + E6 Triton AOT

本仓库把 Triton 算子编译成可在 Nanhu FPGA E6 上执行的静态 RISC-V ELF,并将它和 固定 Linux/runtime 一起发布为一个完整 DDR bundle:

Triton spec -> E6 AOT + 自动 fence -> 静态 ELF
            -> QEMU/reference/loader 校验
            -> 固定 Linux workspace bundle -> Nanhu runner -> E6

算子开发人员只维护 kernel、输入参数和 expected output。无需处理 DMA、driver ioctl、 ELF 装载、DDR 映射,也不得重编 Linux、driver 或 runner。

算子开发:统一入口

首次配置开发机:

git clone <nanhu-linux-ddr-url>
cd nanhu-linux-ddr
make operator-config
# 编辑 .e6-aot.env,填写外部 Triton/LLVM/Buddy/GCC/QEMU 路径
make operator-setup              # 安装 backend 并检查工具链与固定 SDK

仓库不捆绑大型或版本相关的 host 工具。.e6-aot.env 是稳定接口,路径可以由每位 开发者自行提供,也可以通过 E6_AOT_CONFIG=/path/to/team.env 使用团队配置。

创建算子模板:

make operator-new NAME=vector_add SPEC="$PWD/operators/vector_add_spec.py"

日常构建和交付只有一条命令:

make operator SPEC="$PWD/operators/vector_add_spec.py"

默认名称从 spec 文件名推导,vector_add_spec.py 生成 vector_add.elf。需要发布别名时 才加 NAME=release-name。同一条命令可以反复执行,流程只刷新该算子的调试 build; staging 位于自动清理的事务目录,旧的最终 bundle 会保留到新 bundle 完整校验通过。

成功后只交付:

output/workspace-final/

这里已经包含固定 linux_base.bin、固定 runner、算子 ELF、module table、load plan 和 全部 sparse extents。不要单独复制或编辑其中任何文件。

默认自动完成的检查

make operator 自动完成:

  1. Triton 降级与无 glibc 静态 ELF 链接;
  2. kernel 入口、每条 RVV 指令之后及所有返回路径的 fence rw,rw;
  3. E6-safe RVV 寄存器分配、ISA/重叠/控制流 fence 审计;
  4. QEMU actual/expected 逐项比对;
  5. 固定 Nanhu e6-elf-runner --check;
  6. 使用固定 Linux/runtime SDK 打包;
  7. SHA256、DDR plan、module table、extents 和 ext4 内容深度校验;
  8. 保护 Linux、driver、runner、SDK 和工具链源码不被算子流程修改。

正式交付不要使用 --no-qemu、--no-asm 或 --no-loader-check。不要给最终 ELF 直接打补丁补 fence,fence 必须由 backend 生成并经过机器码审计。

固定 Linux 合同:

path    software-workspace-sdk/base/linux_base.bin
size    6291456 bytes
SHA256  8b6e13d3758e61cc828ce32871b548ebac453ad5eb815630430cc3dc05697fa1

上传与板端运行

上传 output/workspace-final 整个目录,将其中自己的 ddr-load.plan 交给 FPGA runtime。 服务器、远端目录和 uv_runN slot 由现场管理员提供,完整命令见 上传文档。

Linux 启动并挂载 /workspace 后无需查 ELF 文件名:

/workspace/bin/run-operator check
/workspace/bin/run-operator

run-operator 自动选择 bundle 中唯一的业务 ELF,并排除 runtime smoke。最终验收需要 runner 返回 0、算子 actual/expected 一致,并出现:

PASS: ELF completed on E6 through the syscall runtime and driver

QEMU PASS、--check PASS 或 /dev/e6npu0 存在,都不能单独证明 E6 已实际执行算子。

角色边界

算子开发人员使用:

命令 用途
make operator-config 创建外部工具路径配置
make operator-setup 首次安装 backend 并执行完整环境检查
make operator-check 一次检查 AOT 工具链和固定 SDK
make operator-new NAME=... 创建 spec 模板
make operator SPEC=... [NAME=...] 唯一正式构建、验证和发布入口

以下属于系统或工具链维护,不是日常算子接口:

命令 用途
make e6-aot ... 单独调试编译器,不生成交付 bundle
make MAINTAINER=1 verify-e6-elf-runner 重建并验证 runner/runtime
make MAINTAINER=1 workspace-final 重建 Linux、driver 和启动镜像
make MAINTAINER=1 workspace-sdk 刷新固定打包 SDK

系统维护 target 默认会拒绝普通调用。算子流程不会调用它们,也不会替换固定 linux_base.bin 或 runner。

目录

路径 职责
tools/e6-triton-aot/ AOT CLI、backend patch、spec 模板和维护样例
runtime/e6-elf-runner/ 通用 ELF loader、syscall runtime 和回归源码
workspace/template/ /workspace 模板和板端 run-operator
software-workspace-sdk/ 固定 Linux/runtime 与 software-only packager
src/, board/, configs/, layout/ 系统维护源码和板级配置
scripts/ staging、发布和验证实现
output/workspace-final/ 唯一可上传的最终产物

详细文档

关于
265.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号