开源进行时|开源里程碑
关键词:K3 / upstream / 编译工具链状态:系列支持已合入

对芯片开发者来说,工具链往往是适配工作的第一站。
当一颗芯片的核心定义、扩展指令和调度模型进入社区主线,开发者就可以基于主线工具链开展编译、适配和后续调优,而不必从厂商私有分支或补丁包开始。
进迭时空 K3 的工具链支持,已经进入这样的主线开发路径。

作为全球首款符合 RVA23 规范的量产 RISC-V AI CPU,K3 的硬件特性已被主流编译工具链上游系统性接纳:X100、A100 两颗核心的 CPU Target 定义已合入 LLVM / GCC 主线,面向 AI 计算的自定义矩阵扩展指令已合入 LLVM / GCC / Binutils 主线,X100 的调度模型与指令融合支持也已合入 LLVM 主线。【1】
这意味着,开发者使用社区主线的 Clang / LLVM、GCC,无需依赖厂商私有分支或补丁包,就能针对 K3 的硬件特性进行正确编译、选择目标核心,并使用进迭时空的定制 AI 指令。继 Linux 7.0 内核原生支持之后,K3 在编译工具链这一软件栈基石上,也获得了官方、原生、可持续维护的上游支持。
一颗核心进入主线工具链,需要完成什么
芯片能力要被软件真正使用,中间必须经过工具链。作为芯片软件栈的基础设施,上层软件生态中的大量项目,都需要建立在编译器、汇编器、链接器等工具能力之上。
如果相关支持只停留在厂商私有分支中,开发者往往需要处理指定版本、额外补丁和后续升级适配等问题。硬件特性进入 LLVM、GCC、Binutils 等主线后,才能更顺畅地被基于主线工具链的软件项目识别和使用。
一颗核心要在工具链中完整落地,通常需要三层支持逐级完善:(CPU Target)让编译器认识这颗核心、(Vendor Extension)让工具链用得上芯片的定制指令、(调度模型与指令融合)让编译器理解核心的流水线与微架构特征,生成更贴近硬件特性的代码。

K3 的 X100、A100 两颗核心,已经在这三层上完成了多项主线合入:从 CPU Target 到 Vendor Extension,再到调度模型与指令融合,K3 工具链支持已经覆盖从目标识别、定制指令使用到微架构优化的关键链路。
CPU Target,让编译器认识 X100 与 A100
CPU Target 是工具链支持一颗核心的起点。
只有编译器内部具备对应的处理器定义,开发者才能通过 -mcpu、-mtune 等参数选择正确目标,编译器也才能关联到该核心支持的指令集扩展组合。
目前,K3 两颗核心的处理器定义均已合入 LLVM 与 GCC 主线:
X100:K3 的高性能核心,面向高性能场景,支持虚拟化扩展;
A100:K3 的 AI 核心,面向 AI 计算。

在主线工具链中,开发者可通过:-mcpu=spacemit-x100、-mcpu=spacemit-a100 选择对应目标核心,并正确映射到其支持的 RVA23 及相关扩展组合。
AI 矩阵扩展,让工具链用上 K3 的 AI 指令
让编译器认识核心之后,下一步是让工具链能够处理芯片的定制指令。
对 K3 来说,这一层最能体现其 AI 硬件特性。面向 AI 计算,进迭时空设计了 SpacemiT AI 矩阵扩展指令集【2】。该扩展与社区 IME 扩展方向保持一致演进,已在 K1 / K3 两代芯片上落地量产,并已经在 llama.cpp 等主流软件中得到应用,相关进展可参考此前介绍: https://mp.weixin.qq.com/s/xEoBIpN5H6DkUitzxVfjAw
在工具链侧,相关定制指令支持已经进入主线:
X100 / X60 的 xsmtvdot 扩展支持已经就位;
A100 的 xsmtvdotii 扩展已合入 LLVM、GCC、Binutils 主线。

调度模型与指令融合,让编译器更理解微架构
CPU Target 解决“认识核心”的问题,Vendor Extension 解决“用上指令”的问题。
但要让生成的代码更贴近硬件特性,还需要编译器进一步理解微架构。
调度模型用于描述各类指令在核心流水线上的延迟、吞吐和执行资源占用。编译器可以基于这些信息安排指令顺序,减少流水线气泡,为生成更高质量的代码提供基础。
目前,X100 的基础标量调度模型、Macro-op Fusion 支持已经合入 LLVM 主线,向量调度调优也在持续推进。K3 在主线工具链中的支持并不止于“能识别、能汇编”,也已经进入面向微架构优化的阶段。

把硬件能力带进开源主线
编译工具链是芯片软件栈的基石。K3 的 CPU Target、AI 定制指令、调度模型与指令融合进入主线后,开发者可以基于社区主线编译器面向 K3 正确编译、使用定制 AI 算力,并持续受益于后续调优。
K3 工具链基础支持能够在 LLVM、GCC、Binutils 主线落地,离不开全球开发者与维护者在代码贡献、代码评审中给予的大力支持。在此,我们向每一位参与其中的社区开发者致以诚挚感谢。
取之于开源,贡献于开源。
基础支持的合入只是起点。后续,进迭时空将继续与社区协作,在性能优化方面持续打磨。我们坚信,通过持续的 Upstream 开源实践,RISC-V 的硬件特性将得到主线软件栈更充分的支持,软硬件也将在开放协作中持续演进,共同支撑 RISC-V 在更多场景中的应用与落地。
【1】
https://github.com/spacemit-com/.github/blob/main/upstream-status/toolchain.md
【2】
https://www.spacemit.com/community/document/info?lang=zh&nodepath=ai/architecture/ime_extension.md
夜雨聆风