架构状态¶
1.架构状态分层概述¶
灵犀指令集采用两层指令模型,其架构状态也相应分为两层:
| 层级 | 名称 | 可见性 | 功能 |
|---|---|---|---|
| 第一层 | GSTATE(Global State) | 块间共享 | 管理全局资源,支持跨块通信与跳转 |
| 第二层 | BSTATE(Block State) | 块内私有 | 管理块内私有寄存器、任务调度与数据处理 |
这种分层设计提升了系统的灵活性与硬件调度效率。
2.第一层架构状态(GSTATE)¶
GSTATE 主要用于跨块指令的数据传递、全局状态的维护以及系统级操作控制,是块指令实现高效调度和动态执行的基础。其中包含:
| 寄存器 | 命名 | 备注 |
|---|---|---|
| 全局通用寄存器 | GGPR | 所有块指令共享 |
| 系统状态寄存器 | SSR | 主要由系统块维护 |
| 块级别程序计数器 | BPC | 每个块指令都有自己的BPC |
| Tile寄存器 | Tile | 数据块类型的块指令之间共享 |
这组寄存器用途包括:
- 全局数据共享
- 跨块跳转控制
- 异常处理与上下文保存
1.第二层架构状态(BSTATE)¶
BSTATE 为块内私有状态,不同块类型可有不同实现。其中包括:
| 寄存器 | 命名 | 备注 |
|---|---|---|
| 通用标量寄存器 | SGPR | 存储通用计算所需标量数据 |
| 块内程序计数器 | TPC | 跟踪块体指令的执行位置 |
| 块参数寄存器 | BARG | 存储块指令的跳转、块类型和输出寄存器等信息 |
| 通用形参寄存器 | LGPR | 分离块中作为全局寄存器GGPR的备份 |
| 通用向量寄存器 | VGPR | 存储并行计算所需的向量数据 |
| Tile形参寄存器 | LTAR | 数据块中作为输入输出Tile寄存器的映射 |
| 迭代控制寄存器 | LOOP | 控制并行和串行模式的块指令块体的执行次数 |
| 掩码寄存器 | PRED | 存储并行计算的多个执行通道的掩码 |
这组寄存器用途包括:
- 块内数据处理
- 条件跳转与分支预测
- 块体指令并行执行支持
两层架构状态的动态调度¶
1.全局寄存器与私有寄存器的分离¶
全局寄存器和私有寄存器的分离设计确保了全局数据传递和块内计算的独立性。全局寄存器主要用于跨块传递数据,保证块与块之间的依赖关系顺畅。而私有寄存器只在块内生效,减少了寄存器重命名的复杂度和硬件开销。这种分离为块指令的动态调度奠定了基础,确保块指令的并行执行和跨块数据流的有效管理。
2.动态跳转与任务调度¶
第二层架构中的TPC和BARG为块内跳转和条件执行提供了灵活的支持。在块执行过程中,TPC负责跟踪当前块体指令的位置,而BARG用于块内条件判断和目标地址计算。这种设计使得处理器可以通过硬件动态调度块内的任务,并根据块执行的状态做出跳转决策。
3.块指令的动态提交¶
在块指令执行过程中,硬件会动态追踪每个块的状态。当块指令内部的块体指令执行完成时,处理器会根据BARG寄存器中的跳转信息来决定下一个块的执行位置。同时,通过私有寄存器硬件可以确保在块提交时高效地管理私有数据流,避免全局寄存器的过度依赖。
4.并行与乱序执行¶
两层架构状态的设计特别适合乱序执行的处理器架构。块指令的私有状态可以允许多个块同时在不同的块引擎上并行执行,硬件调度器通过BPC和TPC管理块之间和块内的跳转。同时,通过BARG寄存器控制条件跳转,硬件可以灵活调度不同块的执行顺序,最大化处理器的并行能力。
架构限制说明¶
尽管两层架构提供了强大灵活性,但也存在以下限制:
| 限制项 | 说明 |
|---|---|
| 块体指令访问 R0-R23 | 块内块体指令均可访问第一层 R0-R23,支持并行调用系统服务或共享变量 |
| 块体指令访问前序结果 | 块内块体指令可访问前序指令结果,支持微操作级并行 |
| 系统寄存器访问受限 | 仅允许通过以下指令访问系统寄存器: • SSRGET / SSRSET • C.SSRGET / HL.SSRGET • HL.SSRSET |
| 输出到 全局寄存器 | 块内块体指令可将结果输出到全局寄存器。一体块内可在块提交前修改,分离块中需要在块提交后将私有寄存器状态更新到全局寄存器 |
限制确保系统寄存器安全,防止非法访问。
总结:灵犀指令集的优势¶
| 优势 | 说明 |
|---|---|
| 灵活性高 | 支持块内私有状态与全局共享状态的分离 |
| 并行能力强 | 支持乱序执行与多块并行 |
| 调度高效 | 硬件可动态管理跳转与任务分配 |
| 异常安全 | 中断时自动保存 BSTATE 至 EBSTATE |
| 可扩展性好 | 不同块类型可自定义 BSTATE 实现 |