第四周周报(6.23-6.29)
本周工作主要为 K3 板级适配和 AI 运行时。其次是比赛文档的编写. 与最初计划相比,本周有相当一部分时间被平台侧基础能力占用:V 扩展上下文、串口驱动、GMAC 驱动和真板运行环境都直接影响后续 A100/X100 IME backend 能否可靠运行。
本周工作概览
本周主要完成和推进了六件事:
- 补齐 StarryOS 上 RISC-V V 扩展的上下文保存、恢复、初始化和线程隔离测试。
- 完成 K3 串口驱动相关支持,改善真板调试和日志输出条件。
- 编译 llama.cpp 的 V 扩展版本和非 V 扩展版本,并分别在 QEMU 和 K3 真板上运行 TinyStories/TinyStory 类小模型,确认两类构建都能跑通。
- 继续推进 GMAC 网卡驱动,但本周尚未完成。
- 建立
k3_ggml_bridge测试版,用于把 ggml/llama.cpp 侧 F32 MatMul 请求转成k3_aiRuntimegraph 提交。
V 扩展上下文支持
第三周已经确认 K3 的 IME 指令依赖 RISC-V V 扩展,因此本周首先补齐 V 扩展上下文支持。K3 上向量状态较大,如果任务切换时不保存向量寄存器和相关 CSR,多线程或多任务环境下会直接破坏 IME/向量计算结果。
实现上需要处理:
- 32 个向量寄存器的保存和恢复。
vl、vtype、vstart、vxrm、vxsat、vcsr等向量相关状态。- 新线程向量状态初始化,避免泄漏父线程或前一个任务的数据。
- 跨线程切换时的向量寄存器隔离。
测试程序使用 vlenb 自动读取硬件 VLEN,并以 m8 register group 覆盖全部 32 个向量寄存器。测试点包括同线程 sched_yield 恢复、新线程初始状态、worker 线程 yield 恢复和父子线程隔离。QEMU 和 K3 真板验证均通过,真板日志显示 ALL PASS。
这部分工作是 A100/X100 IME backend 的前置条件。如果没有 V 扩展上下文保存,单次 demo 可能能跑,但一旦进入多任务环境就不可靠。
串口驱动与真板调试支持
本周补齐了 K3 平台串口相关支持。串口驱动本身不属于 AI runtime 的核心逻辑,但它对真板 bring-up、内核日志、驱动调试和异常定位非常关键。
在 K3 真板上,UFS、GMAC、AI runner、V 扩展和 IME backend 的问题都需要依赖串口日志观察启动阶段和运行阶段的状态。串口支持稳定后,后续定位 DMA cache、设备初始化和线程亲和性问题的效率明显提高。
llama.cpp V 扩展与非 V 扩展运行测试
本周尝试编译 llama.cpp 的两类版本:
- 带 RISC-V V 扩展的版本。
- 不带 V 扩展的普通版本。
两类版本都分别放到 QEMU 和 K3 真板上运行 TinyStories/TinyStory 类小模型,结果均能正常跑起来。这说明当前 StarryOS 真板环境已经具备运行更复杂用户态程序的基础条件,也验证了 V 扩展上下文支持没有破坏普通用户程序运行。
测试中也观察到一个现象:QEMU 上 V 扩展版本不一定更快,甚至可能因为模拟器开销和多线程同步开销表现更差。因此 QEMU 更适合做功能验证,真实性能判断仍需要以 K3 真板为准。 但是在k3板子上用v扩展到速度就快得多
root@starry:/root # ./llama_cli_vector_extention -m story.gguf -t 1
Loading model...
▄▄ ▄▄
██ ██
██ ██ ▀▀█▄ ███▄███▄ ▀▀█▄ ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██ ██ ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
██ ██
▀▀ ▀▀
build : b9845-d9df11006
model : story.gguf
modalities : text
available commands:
/exit or Ctrl+C stop or exit
/regen regenerate the last response
/clear clear the chat history
/read <file> add a text file
/glob <pattern> add text files using globbing pattern
> hi
It was a popular place. All the other boats were there too. They were all different colors and had bright, round faces on their sails.
The other boats saw the popular boats and started to sail away.
They sailed fast and fast across the waters. All around them were so much fun to see!
Soon it was time to go home. The boats were going too fast and the boats were going faster and faster.
The boats got frustrated. They couldn't move and soon they were stuck in the same spot.
The boats were too fast and they couldn't stop. They crashed into the boat and it exploded.
The boats were stuck in the same spot. They were stuck and could not move anymore.
The boats were stuck forever and never moved again. Once upon a time, there was a little girl called Lily. She liked to play with her toys all around her room. She had a big toy box with many toys.
One day, Lily was playing with her toys and she noticed that one of them
[ Prompt: 197.5 t/s | Generation: 59.3 t/s ]
>
Exiting...
GMAC 驱动推进
本周继续推进 K3 GMAC 网卡驱动。该驱动对后续模型、日志和测试文件传输很有价值,但驱动涉及 MAC、DMA descriptor、PHY/link 状态和 cache 同步等多个环节,本周尚未完成。
当前结论是:GMAC 仍处于开发中状态,短期内真板复现仍主要依赖 UFS/rootfs、串口和手动拷贝方式。后续会继续推进 GMAC,使开发板具备更方便的网络调试和文件传输能力。
这份镜像用于配合 K3 真板启动和 AI runtime 相关模块验证。具体刷写方式仍取决于开发板当前分区和启动介质,复现文档中会继续说明 rootfs 分区、fastboot 和 UFS 相关注意事项。
本周问题与判断
- 平台侧工作耗时超出预期:最初预期 K3 平台侧适配已有其他人接手,但实际 AI runtime 要上真板,必须临时补齐 UFS、串口、V 扩展、DMA cache 等基础能力。
- V 扩展是 IME backend 前置条件:不补上下文保存恢复,A100/X100 IME 路径无法在真实多任务环境中安全使用。
后续工作
- 继续推进 GMAC 驱动,争取让 K3 真板具备网络调试和文件传输能力。
- 将
k3_ggml_bridge从测试版推进到真实 ggml backend 接入点。 - 将 A100 IME MatMul 探针路径收敛到正式 backend candidate。
- 整理 rootfs 镜像和真板复现步骤,保证
root_fs.img与文档说明一致。