test(starryos): add K230 NNCase runtime demo#1058
Conversation
14bb54c to
f1af9a2
Compare
There was a problem hiding this comment.
Review 总结
PR: test(starryos): add K230 NNCase runtime demo
本 PR 新增 K230 KPU 驱动 (drivers/npu/k230-kpu)、StarryOS /dev/kpu devfs 设备节点、NNCase runtime demo 测试用例,以及 Xuantie C9xx 用户态 vector 状态初始化修正。整体代码质量良好,结构清晰。
代码审查
drivers/npu/k230-kpu/src/lib.rs ✅
no_stdcrate,UAPI 常量齐全,有repr(C)断言保证 ABI 稳定性Kpu::new()有 SAFETY 文档,command_words()正确校验 4G 窗口边界- 单元测试覆盖:命令范围校验、UAPI layout 稳定性、边界条件
os/StarryOS/kernel/src/pseudofs/dev/kpu.rs ✅
- FDT probe + 静态 fallback 策略正确
copy_from_user/copy_to_user使用user_copy,安全边界合理- IRQ handler + WaitQueue + poll 超时 100ms 的混合等待机制设计合理
- mmap 支持虚拟偏移和物理地址两种方式映射同一区域,兼容 NNCase SDK 约定
components/axcpu/src/riscv/uspace.rs ✅
- 新增标准 RISC-V VS bit(bit 9)与 XThead legacy bits(bits 23-23)并行设置,K230 C908V QEMU 需要两者
test-suit 用例 ✅
- qemu-riscv64.toml 配置合理,timeout=300s,正则匹配完整
- Shell 脚本
bash -n全部通过 - C 源码中 K230 SDK compat shim 自包含,不依赖已删除的 driver C header
本地验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ PASS |
cargo clippy -p k230-kpu |
✅ 0 warnings |
cargo test -p k230-kpu |
✅ 4/4 passed |
cargo xtask clippy --package ax-cpu |
✅ 28/28 checks passed |
Shell 脚本 bash -n (4个) |
✅ All PASS |
QEMU 验证说明
kpu-nncase-runtime 测试用例需要 K230 QEMU(带 KPU 仿真)和本地 K230 SDK/NNCase 资产(.kmodel、预构建 demo binary),当前审查环境无法执行完整 QEMU 运行。PR 作者已在 PR body 中提供了完整的 QEMU 验证输出,包括 NNCASE_MINIMAL_PASS、YOLOV8N_DEMO_PASS、K230_NNCASE_RUNTIME_PASS。
关联 PR
结论
代码质量好、测试覆盖充分、文档完整、无阻塞问题。建议 APPROVE。
Powered by mimo-v2.5-pro
e4b7fbf to
e1f19fc
Compare
|
已处理 conflicts:
本轮重新验证: 关键结果: |
ZR233
left a comment
There was a problem hiding this comment.
谢谢这个 K230 NNCase runtime demo,整体方向我认同:它把验证从底层 /dev/kpu smoke 推进到了真实 .kmodel、NNCase runtime command generation、KPU submit/wait/output hash 的端到端路径。
本次审查最新 head c95135d652fb9f3d4c802c7f02bafc46a605b176,CI 中常规 formatting、clippy、Starry/ArceOS/Axvisor QEMU 等检查没有看到失败;review threads 为空,mergeability 为 clean。
本地验证结果:
cargo fmt --check: PASS
bash -n demo-teacher.sh run-nncase-runtime-demo.sh build-nncase-runtime-binaries.sh trace-nncase-runtime.sh: PASS
python3 -m py_compile diff-kpu-trace.py: PASS
git diff --check origin/dev...HEAD: PASS
cargo xtask clippy --package ax-cpu: 28/28 checks passed
重复/重叠分析:origin/dev 上只有更底层的 kpu-smoke,没有同等的 kpu-nncase-runtime demo;open PR 搜索也没有发现覆盖同一功能域的并行 PR。
不过这里有一个阻塞问题:kpu-nncase-runtime 的 CMake 在进入 prebuilt binary fallback 前就强制要求 SDK NNCase static lib 存在,导致 PR body 和文档承诺的“已有 ignored 预构建 demo binaries 时可不从源码构建”的路径实际不可用。这个问题会让 reviewer/演示环境即使已经准备了预构建 guest 二进制,也仍然必须准备完整 SDK lib,和当前可复现说明不一致。
我已在 CMakeLists.txt 上留了 inline comment,建议把 SDK runtime/lib/toolchain 检查移动到源码构建分支内;prebuilt 分支只要求模型、图片和两个预构建二进制存在即可。
因此本轮先请求修改。
|
已根据 review 和反馈更新本 PR:
本轮补充验证: |
There was a problem hiding this comment.
Review 总结
PR: test(starryos): add K230 NNCase runtime demo
最新 head: 0ad6643b7a1e22201ada646866260e6d836708a3
本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,符合项目规范。
变更内容
apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo 应用,包含 C++ NNCase compat shim、demo 程序、CMake 构建(支持源码构建和 prebuilt fallback)、shell 脚本、构建/追踪工具。components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9),K230 C908V QEMU 需要两者。test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/:保留为 CI/test wrapper,CMake 入口复用apps/starry/k230-kpu-nncase/c。- 文档:新增中英文资产准备文档、apps/starry README 更新。
前序 review 处理
ZR233 之前提出的 CMake prebuilt fallback 阻塞问题(SDK NNCase lib 在 prebuilt 路径前强制要求)已在最新提交中修复:
K230_BUILD_FROM_SOURCE分支处理 SDK lib/toolchain 检查;- prebuilt 分支只要求 kmodel、bus.jpg 和两个 guest demo 预构建二进制;
- test-suit wrapper CMakeLists.txt 已改为复用 app 目录的 CMake,不再有独立的 SDK lib 强制检查。
本地验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ PASS |
cargo xtask clippy --package ax-cpu |
✅ 28/28 passed, 0 failed |
bash -n shell 脚本(6个) |
✅ All PASS |
python3 -m py_compile diff-kpu-trace.py |
✅ PASS |
git diff --check |
✅ PASS |
[patch.crates-io] 检查 |
✅ 无 patch |
CI 状态
CI workflow 整体结论:success。Test with std / run_container 和 Test axvisor loongarch64 qemu / run_container 成功;其他 run_host 任务为 skipped(预期的 CI 矩阵/path-filter 行为)。kpu-nncase-runtime 测试需要 K230 QEMU(带 KPU 仿真),标准 CI 无法覆盖;PR 作者已在 PR body 中提供完整的 QEMU 验证输出。
重复/重叠分析
origin/dev上有底层kpu-smoke,无同等kpu-nncase-runtimedemo。- #1046、#1054 已合入
dev(底层 KPU driver 和/dev/kpu),本 PR 不重复携带。 - 搜索 open PR 未发现覆盖同一功能域的并行 PR。
结论
代码质量好、测试覆盖充分、文档完整、CMake prebuilt fallback 问题已修复、CI 绿灯。无阻塞问题,建议合入。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
验证结果:按文档无法直接跑通,请求修改
我在本地按 PR 文档完整验证了构建和运行流程。Demo 本身功能正确(54 次 KPU run 全部完成,output tensor hash 非零),但按 PR 提供的文档和代码无法直接跑通,存在以下 3 个阻塞级 bug:
Bug 1(阻塞):构建脚本 REL_WORKTREE 路径计算错误
文件: apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh:23
REL_WORKTREE=${WORKTREE_ROOT#"$STORAGE_ROOT"/}当 STORAGE_ROOT == WORKTREE_ROOT(SDK 在仓库根目录内,这是最常见的场景)时,参数展开无法剥离前缀(因为 WORKTREE_ROOT 没有尾部 /),导致 REL_WORKTREE 被错误赋值为完整绝对路径 /home/.../tgoskits-gpt。
实际结果: Docker -w 变成 /workspace//home/.../tgoskits-gpt,cmake 找不到源码目录。
修复建议:
if [ "$WORKTREE_ROOT" = "$STORAGE_ROOT" ]; then
REL_WORKTREE=""
else
REL_WORKTREE=${WORKTREE_ROOT#"$STORAGE_ROOT"/}
fiBug 2(阻塞):build-riscv64gc-unknown-none-elf.toml 缺少必需的 env 字段
文件: apps/starry/k230-kpu-nncase/build-riscv64gc-unknown-none-elf.toml
xtask 的 BuildInfo 结构体要求 env: HashMap<String, String> 为必需字段,但该文件未声明。执行 cargo xtask starry app qemu 或 cargo xtask starry test qemu 均报:
TOML parse error at line 1, column 1
missing field env
注意:dev 分支上已有的 test-suit/starryos/k230-qemu/qemu-k230/build-riscv64gc-unknown-none-elf.toml 同样缺少此字段(这是 dev 分支 xtask 后续新增的必需要求),建议本 PR 一并补上两个文件。
修复: 在文件开头添加 env = {}。
Bug 3(阻塞):文档中 app run 子命令不存在
PR 中多处文档写的命令 cargo xtask starry app run 不存在,实际子命令是 app qemu:
| 文件 | 位置 |
|---|---|
apps/starry/README.md |
第 21 行 |
apps/starry/k230-kpu-nncase/README.md |
第 90 行 |
docs/k230-kpu-nncase-runtime.md |
2 处 |
docs/k230-kpu-nncase-runtime.zh.md |
2 处 |
修复: 全局替换 app run → app qemu。
修复后验证通过的证据
我在本地修复上述 3 个问题后,成功跑通了完整 demo:
NNCASE_MINIMAL_PASS
YOLOV8N_DEMO_PASS
K230_NNCASE_RUNTIME_PASS
=== SUCCESS PATTERN MATCHED: (?m)^K230_NNCASE_RUNTIME_PASS$ ===
- 54 次
gnne_enableKPU run 全部status=0x0000000400000004(DONE) - Output tensor hash 非零(如
fnv1a64=0x79742dfead3bd654) - MMZ 分配 15 次,KPU run 54 次,与 PR 描述一致
总结:Demo 功能正确,但按当前文档和代码无法直接跑通,请修复以上 3 个问题后重新提交。
|
已处理最新 review 中的 3 个阻塞问题,并推送到
本轮重新验证:
|
There was a problem hiding this comment.
Review 总结
PR: test(starryos): add K230 NNCase runtime demo
最新 head: 97bc67a9c8b032f66d83db2c7b2f5cafc9fc41e0
本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,符合项目规范。
变更内容
apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo 应用,包含 C++ NNCase compat shim、两个 guest demo 程序(kpu-nncase-minimal、k230-yolov8n-demo)、CMake 构建(支持源码构建和 prebuilt fallback)、shell 脚本、构建/追踪工具、中英文文档。components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9),K230 C908V QEMU 需要两者。变更正确且范围最小。test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/:保留为 CI/test wrapper,CMake 入口复用apps/starry/k230-kpu-nncase/c,不重复携带源码。- 文档:新增
docs/k230-kpu-nncase-runtime.md和中文版docs/k230-kpu-nncase-runtime.zh.md,apps/starry/README.md和apps/starry/k230-kpu-nncase/README.md更新。
前序 review 处理
ZR233 最近一轮(6 月 4 日)提出 3 个阻塞问题,已在最新提交 97bc67a9 中全部修复:
REL_WORKTREE路径计算:STORAGE_ROOT == WORKTREE_ROOT时设置空字符串,避免 Docker-w拼出/workspace//abs/path。✅ 已验证。build-riscv64gc-unknown-none-elf.toml缺少env字段:app 和 test-suit 两个文件均已补充env = {}。✅ 已验证。- 文档中
app run子命令:K230 相关文档和 PR 描述中已统一为cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。✅ 已验证(apps/starry/README.md中 Redis 等其他 app 仍用app run为预存内容,非本 PR 引入)。
更早的 CMake prebuilt fallback 问题(ZR233 第一次 review)也已在之前的提交中修复:SDK lib/toolchain 检查仅在 source build 分支执行。
本地验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ PASS |
cargo clippy --manifest-path components/axcpu/Cargo.toml --all-features -- -D warnings |
✅ 0 warnings |
bash -n shell 脚本(6个) |
✅ All PASS |
python3 -m py_compile diff-kpu-trace.py |
✅ PASS |
git diff --check |
✅ PASS |
[patch.crates-io] 检查 |
✅ 无 patch |
CI 状态
CI workflow 全部 check runs 完成(conclusion 为 skipped 的 run_host/run_container 任务为预期的 CI 矩阵行为,这些 skipped 任务覆盖的是 aarch64、loongarch64、x86_64 等非 RISC-V 架构以及自托管 runner 场景,与本 PR 新增的 RISC-V K230 demo 无直接关系)。无失败。
重复/重叠分析
origin/dev上有底层kpu-smoke,无同等kpu-nncase-runtimedemo。- #1046、#1054 已合入
dev(底层 KPU driver 和/dev/kpu),本 PR 不重复携带。 - 搜索 open PR 未发现覆盖同一功能域的并行 PR。
代码质量
uspace.rsVS bit 修改正确:SSTATUS_VS_INITIAL (0x1 << 9)为标准 RISC-V V 扩展状态,XTHEAD_LEGACY_VS_MASK (0x3 << 23)为 XThead legacy,两者按位或后同时设置,符合 K230 C908V QEMU 行为。- C++ compat shim 设计合理:通过
--wrap链接选项拦截 SDK 调用(open/mmap/ioctl/gnne_enable/mmz_alloc),将虚拟 MMIO 窗口映射到/dev/kpu,实现了完整的 SDK ABI 兼容。 - CMake prebuilt fallback 路径清晰:source build 和 prebuilt 两条路径完全分离,各自由不同的前提条件控制。
- test-suit wrapper 通过
add_subdirectory复用 app CMake,避免代码重复。
结论
代码质量好、所有前序 review 问题已修复、本地验证全部通过、CI 无失败、文档完整、无阻塞问题。建议合入。
Powered by mimo-v2.5-pro
|
补充本地完整验证结果:我重新在 Docker/Linux 环境跑了 环境处理:
关键输出: 这次验证覆盖了 app runner、prebuild 资产安装、K230 QEMU 启动、StarryOS |
91a9a2d to
f887241
Compare
ZR233
left a comment
There was a problem hiding this comment.
本轮复审的是当前 head f887241193c00b674bc94e41f923fa759029680b。最新提交只是 chore: rerun CI for K230 NNCase demo,没有代码 diff;我重点复核了上一轮阻塞项在当前树上的状态。
结论:前序阻塞问题已经修好,当前没有新的阻塞问题,批准合入。
复核结果:
apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh在STORAGE_ROOT == WORKTREE_ROOT时会把REL_WORKTREE置空,不再拼出错误的 Docker-w路径。- app 与 test-suit 两个
build-riscv64gc-unknown-none-elf.toml都已经补上env = {}。 - K230 相关新增文档和 README 中的新增运行命令已使用实际子命令
cargo xtask starry app qemu。 - 旧的 CMake prebuilt fallback thread 已验证修复并标记 resolved:我用临时 dummy model/image 与默认 ignored
apps/starry/k230-kpu-nncase/c/assets/bin下的两个 dummy guest binaries,分别跑通了 app CMake 入口和 test-suit wrapper 入口的 configure/install;两者都只走 prebuilt 分支,未要求 SDK NNCase static lib/toolchain,并安装了kpu-nncase-minimal、k230-yolov8n-demo、k230-nncase-runtime-demo、model 和 image。
本地验证:
git diff --check origin/dev...HEAD通过cargo fmt --check通过cargo xtask clippy --package ax-cpu通过,28/28 target/feature checks passedcargo xtask starry app list能发现qemu k230-kpu-nncase prebuildcargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l能发现boot、kpu-nncase-runtime、kpu-smoke- 6 个新增 shell 脚本
bash -n通过,diff-kpu-trace.py的py_compile通过 [patch.crates-io]检查无新增 patch
运行验证限制:本机当前没有 PR 所需的 out-of-tree K230 SDK/model/image、ignored guest binaries 和 target/qemu-k230-docker-build,所以这次没有重新跑完整 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。不过当前 tip 的最后一提交为空的 CI rerun commit,且 PR 里已有本轮修复后完整 K230 runtime 输出(NNCASE_MINIMAL_PASS、YOLOV8N_DEMO_PASS、K230_NNCASE_RUNTIME_PASS、54 次 gnne_enable DONE、非零 output hash)。本轮本地验证覆盖了这些外部资产之外的可复现 app/test discovery、CMake install 和 ax-cpu 代码路径。
CI:当前 run 26969202660 仍有部分通用 CI job 在 pending;已完成的 formatting、sync-lint、std、Axvisor、Starry self-hosted licheerv/orangepi 等已通过,未看到 failure。K230 runtime 不是默认 CI 能完整覆盖的外部资产场景,因此本次 approval 主要基于上述本地可复现检查和 PR 记录的完整 runtime 验证。
重复/重叠检查:origin/dev 上已有底层 K230/KPU smoke 和前置 #1046/#1054 的 /dev/kpu 支持,但没有同等 NNCase runtime app/test wrapper;当前 open PR 搜索未发现替代或重复的 k230-kpu-nncase / kpu-nncase-runtime 实现。#990、#1038 等只是 broad Starry/qperf 或 nginx app 方向,和本 PR不冲突。
There was a problem hiding this comment.
Review 总结
PR: test(starryos): add K230 NNCase runtime demo
head: f887241193c00b674bc94e41f923fa759029680b (9 commits)
本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,代码质量良好。
变更概览
apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo,含 C++ NNCase compat shim(--wrap链接拦截open/mmap/ioctl/gnne_enable/mmz_alloc)、两个 guest demo(kpu-nncase-minimal和k230-yolov8n-demo)、CMake 构建(源码构建和 prebuilt fallback 两条路径完全分离)、shell 脚本、构建/追踪工具、中英文文档。components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9)。K230 C908V QEMU 两者都需要,改动正确且范围最小。test-suit/starryos/k230-qemu/:test-suit wrapper 通过add_subdirectory复用 app CMake,避免代码重复。两个build-riscv64gc-unknown-none-elf.toml都已补充必需的env = {}。
前序 review 处理
前序两轮 CHANGES_REQUESTED 中的 5 个问题(CMake prebuilt fallback、REL_WORKTREE 路径、env 字段、app run→app qemu)已在最新提交中全部修复,我逐一验证确认:
- ✅ CMake prebuilt fallback:SDK lib/toolchain 检查仅在
K230_BUILD_FROM_SOURCE分支执行 - ✅
REL_WORKTREE:STORAGE_ROOT == WORKTREE_ROOT时设置空字符串 - ✅
env = {}:app 和 test-suit 两个文件均已补充 - ✅ 文档命令:K230 相关文档统一为
cargo xtask starry app qemu
本地验证
| 检查项 | 结果 |
|---|---|
cargo fmt --check |
✅ PASS |
Shell 脚本 bash -n(6 个) |
✅ All PASS |
python3 -m py_compile diff-kpu-trace.py |
✅ PASS |
git diff --check |
✅ PASS |
env 字段检查 |
✅ 两个 toml 均有 |
app qemu 文档一致性 |
✅ PASS |
[patch.crates-io] 检查 |
✅ 无 patch |
CI 状态
CI workflow #26969202660 运行中。截至目前已完成的 job 全部 success(formatting、clippy、sync-lint、axvisor riscv64/aarch64/x86_64、self-hosted board tests),无失败。仍在运行的 job 为 QEMU 矩阵(arceos/starry x86_64/riscv64/loongarch64/aarch64),属于正常耗时。run_container 路径因 path-filter 均为 skipped,符合预期。
代码质量亮点
- C++ compat shim 设计合理:通过
--wrap链接选项拦截 SDK 调用,将虚拟 MMIO 窗口映射到/dev/kpu,实现完整 SDK ABI 兼容 - MMZ 分配器 bump-pointer 实现简洁,256 allocation 上限足够 demo 场景
- FNV-1a 64 哈希输出 tensor 用于回归断言,比 raw diff 更实用
std::_Exit(0)跳过 MMZ 析构避免 Starry/Linux ABI 下的断言崩溃——注释说明清楚- qemu-riscv64.toml 的 success/fail regex 设计完整,覆盖 panic、illegal instruction、各 demo FAIL 标记
重复/重叠分析
origin/dev上有底层kpu-smoke,无同等kpu-nncase-runtimedemo- #1046、#1054 已合入
dev(底层 KPU driver 和/dev/kpu),本 PR 不重复携带 - 搜索 open PR 未发现覆盖同一功能域的并行 PR
结论
代码质量好、所有前序 review 问题已修复、本地验证全部通过、CI 已完成部分无失败、文档完整、无阻塞问题。建议合入。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
本轮复审的是当前 head d969e5991c932c0c93677d698a06b466dc19a88d。f887241193c00b674bc94e41f923fa759029680b..d969e5991c932c0c93677d698a06b466dc19a88d 没有任何 tree diff,后续 3 个提交只是 CI rerun,因此重点确认当前 head、CI 和可复现检查仍然成立。
结论:当前没有新的阻塞问题,批准合入。
复核结果:
- 旧的 CMake prebuilt fallback review thread 已保持 resolved/outdated,当前 CMake 只在 source build 分支检查 SDK NNCase static lib/toolchain,prebuilt 分支只要求本地 ignored guest binaries、model 和 image。
apps/starry/k230-kpu-nncase仍作为 operator-facing app,test-suit/starryos/k230-qemu/.../kpu-nncase-runtime只保留 CI/test wrapper,目录职责和当前 Starry app/test 规则一致。qemu-riscv64.toml使用稳定的K230_NNCASE_RUNTIME_PASS成功标记,并覆盖 panic、illegal instruction、各 demo FAIL 标记。components/axcpu/src/riscv/uspace.rs的 RISC-V 改动只是在xuantie-c9xx下同时设置标准 VS initial bit 和旧 XThead legacy VS bits,符合 K230 C908V QEMU 需要,同时保留旧兼容路径。
本地验证:
git diff --check origin/dev...HEAD通过cargo fmt --check通过cargo xtask clippy --package ax-cpu通过,28/28 checks passedcargo xtask starry app list能发现qemu k230-kpu-nncase prebuildcargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l能发现boot、kpu-nncase-runtime、kpu-smoke- 6 个新增 shell 脚本
bash -n通过,apps/starry/k230-kpu-nncase/c/tools/diff-kpu-trace.py的py_compile通过 [patch.crates-io]搜索无新增 patch
运行验证限制:本地仍没有 PR 所需的 out-of-tree K230 SDK/model/image、ignored guest binaries 和 target/qemu-k230-docker-build,所以没有重新跑完整 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。不过当前 head 与上次已批准的 tree 完全相同,PR 描述中已有本轮修复后的完整 K230 runtime 输出(NNCASE_MINIMAL_PASS、YOLOV8N_DEMO_PASS、K230_NNCASE_RUNTIME_PASS、54 次 gnne_enable DONE、非零 output hash),本轮复核覆盖了外部资产之外的可复现 app/test discovery、syntax、CMake 分支逻辑和 ax-cpu 代码路径。
CI:当前 run 26972457965 对 d969e5991 已无失败;formatting、sync-lint、clippy、std、Starry QEMU、ArceOS/Axvisor QEMU 和 self-hosted board 相关 host jobs 均通过,互斥的 container/host sibling jobs 为预期 skipped。
重复/重叠检查:origin/dev 只有 K230 README 中“NNCase runtime 留到后续 PR”的说明,未包含同等 k230-kpu-nncase / kpu-nncase-runtime 实现;open PR 搜索 k230 nncase、kpu-nncase-runtime、gnne_enable、k230-kpu-nncase 只命中本 PR,没有发现替代或冲突实现。
There was a problem hiding this comment.
Review 总结
PR: test(starryos): add K230 NNCase runtime demo
head: d969e5991 (12 commits)
本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,代码质量良好。
变更概览
apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo,含 C++ NNCase compat shim(--wrap链接拦截open/mmap/ioctl/gnne_enable/mmz_alloc)、两个 guest demo、CMake 构建(源码构建和 prebuilt fallback 两条路径完全分离)、shell 脚本、中英文文档。components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9)。K230 C908V QEMU 两者都需要,改动正确且范围最小。test-suit/starryos/k230-qemu/:test-suit wrapper 通过add_subdirectory复用 app CMake。两个build-riscv64gc-unknown-none-elf.toml都已补充必需的env = {}。
前序 review 处理
前序 CHANGES_REQUESTED 中的所有阻塞问题已在最新提交中全部修复:
- ✅ CMake prebuilt fallback:SDK lib/toolchain 检查仅在 source build 分支执行
- ✅
REL_WORKTREE路径计算:STORAGE_ROOT == WORKTREE_ROOT时设空 - ✅
env = {}字段:两个 toml 均已补充 - ✅ 文档命令:K230 新增内容统一为
cargo xtask starry app qemu
本地验证
| 检查项 | 结果 |
|---|---|
Shell 脚本 bash -n(6 个) |
✅ All PASS |
py_compile diff-kpu-trace.py |
✅ PASS |
git diff --check |
✅ PASS |
env 字段检查 |
✅ 两个 toml 均有 |
app qemu 文档一致性 |
✅ PASS |
[patch.crates-io] 检查 |
✅ 无 patch |
CI 状态
CI workflow run 26972457965:success=1, skipped=15, failure=0。skipped 为预期的 CI 矩阵互斥路径过滤行为。
重复/重叠分析
origin/dev已有底层 K230 KPU driver(#1046)和/dev/kpu(#1054),本 PR 不重复- 无同等
kpu-nncase-runtimedemo 在 base 或 open PR 中 - 搜索 open PR 未发现覆盖同一功能域的并行 PR
结论
代码质量好、所有前序 review 问题已修复、本地验证通过、CI 无失败、无阻塞问题。建议合入。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
审查通过。
本 PR 为 StarryOS K230 QEMU 路径新增 NNCase runtime demo,包含完整的用户态 compat shim、两个 guest demo 程序、CMake 构建系统和 RISC-V 用户态 vector 状态初始化修正。代码结构清晰、分层合理,文档详尽且中英双语一致。Rust 变更正确设置了标准 RISC-V VS Initial 和旧 Xuantie C9xx legacy VS 位,feature 传播链路完整。
依赖关系
这是 K230 KPU/NPU 拆分提交系列的 NNCase runtime demo PR。#1046 与 #1054 已合入
dev,#1053 已按 reviewer 意见关闭并并入 #1054。本 PR 基于最新
upstream/dev,只包含apps/starry/k230-kpu-nncase应用、kpu-nncase-runtime测试 wrapper、展示脚本、资产准备文档和必要的 RISC-V 用户态修正;不重复携带 #1054 的/dev/kpu底层设备适配提交。背景/问题
前置 PR 已完成 K230 QEMU 启动、SD rootfs、KPU driver core 和 StarryOS
/dev/kpuUAPI。本 PR 把验证层从“手写/复放 command”推进到“真实.kmodel由 K230 SDK/NNCase runtime 在 StarryOS guest 内加载并生成 KPU command”。目标是证明 StarryOS 的 KPU 支持覆盖真实 runtime 调用路径:模型加载、tensor 分配、runtime command 生成、通过
/dev/kpu提交、等待 KPU done/IRQ、读取 output tensor。主要修改
apps/starry/k230-kpu-nncase,作为面向使用者和课堂展示的 K230 KPU/NNCase app。build-riscv64gc-unknown-none-elf.toml、qemu-riscv64.toml、prebuild.sh、init.sh。test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime作为 CI/test wrapper,其 CMake 入口复用apps/starry/k230-kpu-nncase/c。/dev/gnne_device//dev/ai_2d_device//dev/mem受限兼容、gnne_enablewrapper。kpu-nncase-minimal和k230-yolov8n-demo。apps/starry/k230-kpu-nncase/demo-teacher.sh;旧的test-suit/.../demo-teacher.sh仅保留为 wrapper。docs/k230-kpu-nncase-runtime.md与docs/k230-kpu-nncase-runtime.zh.md。make prepare_sourcecode、yolov8n_320.kmodel、bus.jpg、NNCase 静态库、SDK toolchain、guest demo 预构建二进制。资产准备说明
本 PR 不提交真实
.kmodel、图片、官方 SDK 静态库或预构建 demo 二进制。完整准备流程见apps/starry/k230-kpu-nncase/README.md、docs/k230-kpu-nncase-runtime.md和docs/k230-kpu-nncase-runtime.zh.md。核心目录结构:
简要流程:
预构建 guest demo 二进制放在 ignored 目录:
运行方式
Starry app runner:
PATH="$PWD/target/qemu-k230-docker-build:$PATH" \ cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64test-suit 回归:
课堂展示脚本:
设计理由
apps/starry/k230-kpu-nncase,符合apps/starry的 operator-facing workflow 定位。test-suit只保留 CI/test wrapper,不再承载主要应用源码,避免测试目录和展示应用目录职责混在一起。.kmodel、官方 SDK 静态库、预构建二进制、大型 capture 放进仓库,避免 PR 引入不可维护的大文件。/dev/kpu内核 ABI 不在本 PR 继续扩张,NNCase runtime 的适配先放在用户态 compat shim 内,降低内核侧风险。detections=0不作为失败条件,因为本 PR 验收重点是真实 runtime 与 KPU 执行链路;YOLO 检测框语义和官方 RT-Smart 后处理完全对齐仍是后续应用层工作。Review 更新
kpu-nncase-runtime/qemu-riscv64.toml的-L路径对齐到 feat(starryos): expose K230 KPU device #1054 的target/qemu-k230-docker-build/pc-bios规范。K230_KMODEL、K230_BUS_JPG和apps/starry/k230-kpu-nncase/c/assets/bin下的两个 guest demo 二进制。apps/starry/k230-kpu-nncase,并保留 test-suit wrapper 复用 app 源码。REL_WORKTREE路径计算问题:当STORAGE_ROOT == WORKTREE_ROOT时不再把绝对路径拼进 Docker-w。build-riscv64gc-unknown-none-elf.toml补充必需的env = {}字段。app run写法改为实际子命令cargo xtask starry app qemu。验证
此前已在 Docker/Linux 环境完成完整 demo 验证:
cargo fmt --check cargo xtask clippy --package ax-cpu cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -c kpu-nncase-runtime git diff --check此前完整 demo 关键结果:
本轮迁移到
apps/starry后,重新执行:cargo xtask starry app list已确认新增 app 可被发现:cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l已确认 K230 test-suit wrapper 可被发现:本轮还验证了
REL_WORKTREE的两种路径场景:本轮还验证了 app prebuild 会把本地 ignored 二进制、模型和图片安装到 rootfs overlay:
并用 Docker/Linux 验证了 app CMake 入口和 test-suit wrapper 入口都能在没有 SDK runtime lib、只提供模型/图片和 prebuilt guest 二进制时完成 configure/install:
CMake 关键输出:
已知限制
.kmodel加载、NNCase command 生成、KPU 提交、done/IRQ 和非零 output tensor hash/stats。detections=0表示 output tensor 到最终 detection boxes 的应用层解释还需要继续对齐,不表示 KPU 没有运行。