什么是灵犀指令集和块指令?¶
灵犀指令集是一套面向通用计算的指令集框架,统一覆盖基础标量运算、基础浮点运算、向量运算、系统设计定义以及可扩展的定制运算指令。 在灵犀指令集框架下,可以围绕统一的编程模型扩展指令与系统设计,而不必维护彼此割裂的执行机器。
灵犀指令集定位于人工智能时代的核心计算基础设施,旨在以一套统一的指令集覆盖标量(Scalar)、向量(Vector)与张量(Tile)三类计算模式,融合SIMD与SIMT执行范式,打通AI与图形渲染任务的边界。
通过构建以块指令为中心的原生并行执行架构,灵犀指令集实现了比 NVIDIA PTX 更具通用性和扩展性的计算指令体系。
我们的目标是从零开始设计一个新的、自主可控的,完全不同的,具有技术竞争力的ISA。
从指令集架构的角度上,灵犀指令集是一个与x86/ARM/RISC-V显著不同的具有技术差异性的指令集设计。
基于灵犀指令集构建的处理器被称为“灵犀处理器”。灵犀处理器依托其独特的指令架构设计,不仅在性能、芯片面积和能效等方面具备突出优势,同时还能有效规避知识产权和专利风险,从而实现芯片设计的完全自主。
灵犀块指令简介¶
灵犀块指令是灵犀指令集中的核心结构化执行概念。
块指令将一组语义相关、操作紧密的微指令组合成一个完整的“指令块”,统一定义整体输入与输出,代表一个可以独立调度的小任务(micro-task)。在许多计算场景中,指令块可以等价地表达为一个张量计算(micro-kernel),例如一个矩阵乘、卷积核或归一化操作。这种“以块为单位”的封装方式,不仅有助于硬件更高效地执行复杂算子,也提升了编译器和执行器的优化空间。
编译器在软件侧将程序编译成块指令形式的二进制代码;而在硬件侧,灵犀处理器不再只把程序视作一条平铺指令流,而是可以把块作为结构化单元整体执行。
块指令将一组相关联的微指令组合成一个完整的“指令块”,并统一定义块的整体输入与输出。编译器在软件侧将程序编译成块指令形式的二进制代码;而在硬件侧,灵犀处理器 不再以传统逐条指令的方式执行程序,而是按照块指令进行整体执行。
块指令为什么更容易获取性能提升¶
块指令集是一个层次化指令集,拥有第一层和第二层的寄存器状态。块指令依赖与编译器分配算法将整个程序层次结构来表达出来,从指令层级上定义共享变量和私有变量。灵犀处理器则对程序按照块头-块体的两条异步流水线来解析并发执行。

块指令性能收益的核心在于:
- 块级并行度(Block Level Parallelism):灵犀处理器可以在更高层次实现并行执行,获得显著性能提升。
- 指令块可以视作独立计算任务,实现灵犀处理器单核内的“小任务”级别并行。
- 块头与块体分离,实现跳转控制与实际计算的解耦,提升执行效率。
- 层次化寄存器管理,硬件能够高效分配与回收寄存器资源。
块指令:提升指令集表达粒度¶
总体方案:我们通过块指令,提升指令信息密度粒度。块指令拥有一个范围的额外信息。每条指令不再表达一个单一的操作,而是一系列操作,这些操作表达成一个指令块,并原子地对系统做出修改。
然而在块指令内部,我们又是一种简单的定长的RISC的指令集。
相比较于传统指令集,块指令表达了更多的信息,包括:
- 块内指令间依赖关系:通过高效编码,将块内指令依赖关系图直接传递给微架构,微架构无需再通过复杂算法做解依赖的操作,降低了微架构的复杂度。
块指令:层次化指令集¶
我们通过块指令,将异构和加速的部分封装成块指令,在不同的抽象层次上表达,这样在通用的框架下,可以在相同的编程框架下使能新的加速单元。
- 第二层架构完全定制化:第二层指令集拥有独立的编码空间,寄存器和指令定义。扩展性极强。同时也不影响块指令的第一层架构状态。产品线拥有自定义指令的能力,而不会破坏层次化指令集的架构。
- 私有和共享寄存器:通过块指令范围的表达,编译器可以表达第一层和第二层架构寄存器,并将这信息直接传递给硬件。通过两层寄存器的分配和管理,大幅降低硬件实现开销。
- 语义范围Scope: 多条指令如果合在一起作为一个整体,将内部的复杂度和外部的复杂度通过接口解耦了。Scope里面再复杂,也不会影响Scope外面的逻辑运算。有了这个信息后,我们可以对一个范围的指令进行标记,从而提升了指令标记的信息熵,为指令提示信息提供更高效的接口。
块指令的历史¶
灵犀指令集的概念并不是从零凭空想象出来的,而是源自于现有的块指令集。
其中灵犀指令集在指令集上的设计主要来自于斯坦福大学的这篇论文:
灵犀指令集 CPU硬件实现也主要采用EDGE指令集的一些数据灵感。而EDGE指令集的设计理念,源自于1970年代的数据流处理器。其核心点在于将一系列的指令按照block的形式执行,block内部以指令间的依赖关系图表达,而block外部依然按照传统的controlflow(跳转)的方式来表达。
关于EDGE指令集的设计,可以参考如下几篇论文:
为什么设计成这样的块指令¶
具体块指令与传统ARM/RISC-V指令比较请看 块指令设计哲学