1. 项目概述
今天我们来深入探讨Vortex开源GPGPU项目中一个关键组件——Schedule模块。作为RISC-V SIMT架构的核心调度器,它负责协调整个6级流水线的运作。这个模块虽然名义上是流水线的最后一级,但实际上它更像是整个系统的"大脑",控制着从指令获取到执行完成的完整流程。
在GPGPU架构中,Schedule模块的特殊性在于它需要处理SIMT(单指令多线程)执行模型特有的挑战。与传统CPU的流水线控制不同,SIMT架构需要同时管理多个warp(线程束)的执行状态,处理线程分支发散(divergence)问题,以及协调各种特殊指令(如wspawn、barrier等)的执行。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 Schedule模块的接口设计
Schedule模块通过8个主要接口与其他流水线阶段通信:
-
Fetch接口(schedule_if):负责向取指阶段提供当前需要执行的warp ID(uuid/wid)和程序计数器(PC)值。这是流水线启动的源头。
-
Decode接口(decode_sched_if):译码阶段通过此接口通知Schedule,当前warp的指令已经完成译码,可以准备下一条指令的PC值。
-
Issue接口(issue_sched_if):当指令被发射到执行单元时,通过此接口通知Schedule模块,开始跟踪该warp的执行状态。
-
Commit接口(commit_sched_if):执行单元完成指令后,通过此接口通知Schedule模块更新warp状态。
-
Warp控制接口(warp_ctl_if):处理6种特殊指令的执行控制:
- wspawn:创建新warp
- tmc:设置线程掩码
- split:处理分支发散
- join:合并分支路径
- barrier:同步屏障
- pred:谓词执行
-
CSR接口(sched_csr_if):提供控制状态寄存器(CSR)需要读取的信息,包括:
- 当前活跃warp的掩码
- 每个warp的线程执行掩码
- warp完成标志
-
分支控制接口(branch_ctl_if):处理来自ALU的分支指令相关信号,更新wa
