跳转至

向量数据块

概述

向量数据块是灵犀指令集架构中面向数据级并行计算的核心执行单元,采用 纯寄存器化执行模型硬件自动向量化技术,为密集计算任务提供确定性的高性能处理能力。

向量数据块执行机制如下:

  • 从Tile寄存器加载数据至向量寄存器
  • 采用多线程并行执行向量运算
  • 将结果写回输出Tile寄存器
  • 禁止内存访问,所有操作均在寄存器间完成

执行模型

向量数据块采用Lane-Group两级执行层次,实现细粒度并行与粗粒度调度的有机结合。向量数据块内Group间执行顺序可以采用并行模式或串行模式,具体请见执行模式章节。如果允许Group间按照并行模式执行,那么需要定义为向量并行块(VPAR);如果必须按照串行模式执行,那么需要定义为向量串行块(VSEQ)

Group级别内容如下:

组件 说明
组成 多个向量Lane + 1个标量Lane
控制单元 标量Lane负责分支跳转、掩码管理和状态迁移
P寄存器 64位掩码寄存器,控制向量Lane执行有效性(1=有效,0=无效)

Lane级别内容如下:

Lane类型 寄存器组 功能说明
标量Lane T/U (SGPR) 执行控制流指令和标量运算
向量Lane VT/VU/VM/VN (VGPR) 执行向量计算指令
通信机制 shuffle指令 实现Lane间数据交换

该模型通过LB寄存器控制总Lane数量,并使用RI/RO寄存器管理全局寄存器上下文,严格遵循分离块执行范式。

vectorblock

向量数据块 不同迭代下块体的如何分配到指定Group的方式请见分组模式 介绍。

块内状态BSTATE

向量数据块的BSTATE中包含以下三部分内容:

  • BARG寄存器:块内的控制参数寄存器,用于条件跳转或执行参数的保存和处理。
  • TPC寄存器:每个Group内拥有独立的TPC,记录当前Group正在执行的指令。
  • LPR-私有寄存器组 包含以下内容:
    • SGPR寄存器:通用标量寄存器,用于保证块内标量数据流传递。
    • RI/RO寄存器:通用形参寄存器,存储块内读写的全局寄存器的备份。
    • PRED寄存器:用于并行lane的掩码控制。
    • LB/LC寄存器:用于块体展开控制。
    • VGPR寄存器:通用向量寄存器,用于作为块内大量并行的向量运算的载体。
    • LTAR寄存器:Tile形参寄存器。
    • Output Tile:输出Tile寄存器,块内已部分更新但未提交到一层状态中。

总体上,以BARG管理块级控制(模式、顺序),以每个Group独立TPC推进向量指令执行,并以8个SGPR维持高效标量通道;配合PRED与LB/LC限定块体迭代与展开,借助大量向量寄存器VGPR,形成向量运算与归约的执行闭环。

核心特征

向量数据块的设计遵循以下核心原则,以实现高效、可靠的向量计算聚合:

层面 特征 说明
执行控制 硬件自动向量化 将开发者编写的标量指令流,在硬件层面自动展开、广播至所有活跃的向量Lane执行,极大简化编程模型。
线程级分支支持 通过标量Lane执行条件跳转,允许不同的Group根据条件独立进入不同的执行路径,支持灵活的流控制。
动态执行掩码 通过64位的P寄存器(1有效/0无效),可动态屏蔽Group内任意向量Lane,实现条件执行和灵活的数据处理。
数据通路 纯寄存器化执行 严格禁止访问内存空间,所有数据操作均在Tile寄存器、向量寄存器(VGPR)和标量寄存器(SGPR)间完成,确保确定性的低延迟。
分层寄存器架构 标量Lane使用T/U(SGPR)寄存器;向量Lane使用VT/VU/VM/VN(VGPR)寄存器;通过shuffle指令实现Lane间高效数据交换。
受限的GGPR写入 仅Reduce类指令被允许写回全局寄存器(GGPR),且输出的GGPR不可作为本块输入,强制数据规约模式的清晰性,避免读写依赖冲突。
编程约束 分离块结构 必须采用块头与块体分离的格式,仅支持Fall-through跳转方式,简化控制流,利于硬件调度与优化。
资源访问隔离 允许读写全局寄存器、系统寄存器和Tile寄存器,但完全隔离外部内存系统,形成自包含的计算单元。

由于向量数据块采用分离块的结构,因此需要遵守分离块的定义规则。

编程模型与适用场景

向量数据块为开发者提供了“编写标量代码,获得向量并行”的编程体验。开发者只需关注单线程的算法逻辑,硬件负责将其展开并高效执行于多个并行Lane上。

理想应用场景:

  • 计算密集型内核:矩阵乘法、张量卷积、点积等线性代数运算。
  • 规约与扫描操作:求和、求极值等需要跨Lane聚合计算的结果。
  • 数据并行过滤与转换:具备规则分支的向量条件操作、元素级函数映射。

不适用场景:

  • 需要与全局内存进行数据交换的算法。
  • 控制流高度不规则、跨Lane分支差异极大的任务。
  • 具有复杂跨块数据依赖,需频繁同步的流程。

块指令约束

1.访问权限与禁止项

  • 向量数据块不允许访问内存,允许访问全局寄存器GGPR,系统寄存器SSR,以及Tile寄存器等全局状态。
  • 向量数据块内不允许有load global或store global指令,否则报非法指令异常。

2.寄存器读写限制与Reduce相关约束

  • 向量数据块最多允许读8个Tile寄存器,写4个tile寄存器,否则报非法参数异常。
  • 向量数据块最多允许读12个GGPR,写4个GGPR,否则报非法参数异常。
  • 向量数据块块内只有Reduce指令允许写全局寄存器GGPR,否则报非法指令异常。
  • 向量数据块内的Reduce指令输出的全局寄存器不允许作为本块指令的输入,否则报非法指令异常。

3.Tile寄存器访问 地址范围约束

  • 向量数据块内的load local指令的地址不能超过本块输入输出tile寄存器的范围,否则报非法越界异常。
  • 向量数据块内的store local指令不能访问输入tile寄存器的地址范围,只能访问输出tile寄存器的地址,否则报非法越界异常。

4.提交与保序/地址重合规则

  • 向量串行块内只允许多个group按照程序序以group id由小到大顺序提交,最后一个group提交后则向量串行块整体提交。
  • 向量串行块内的不同group间的load/store local 允许地址重合,但需要按照group id的顺序按序修改。
  • 向量串行块内的同一个group内的load/store local 基于地址保序,不同group的load/store local按照地址顺序进行全局保序。
  • 向量并行块内的提交需要等所有group提交,每个group的提交定义为本group内最后一条指令的提交。
  • 向量并行块内的不同group间的load/store local 不允许地址重合,如出现重合硬件不保证执行的正确性。
  • 向量并行块内的同一个group内的load/store local 基于地址保序,不同group的地址不保序。

总结

向量数据块通过Lane-Group两级聚合、纯寄存器化执行和硬件自动向量化,构建了一个高性能、确定性强的专用向量计算单元。它特别适用于处理规整、密集且无需内存访问的并行计算任务,是实现核心算力聚合的关键块指令。