PEXTU
PEXTU 即为 P-Extension-Uint,负责 P 扩展指令的相关运算。
PEXTU 可以配置为双路结构或者单路结构,流水级结构均为两级流水(上图中的 PEXT-COMMIT 为组合逻辑实现)
双路结构下PEXTU配置了2个P扩展ALU和2个P扩展MAU,共可以容纳 6 条指令,同时接收 2 条新指令和提交两条新指令。单路结构下 PEXTU 配置了1个P扩展ALU和1个P扩展MAU。
双路结构相比于单路结构具有更高的指令和数据吞吐量,同时也产生了更大的逻辑开销,在数据吞吐量需求高且数据相关度低的向量化场景中,双路 PEXTU 可以提供更高的性能上限(可以实现最高约 1 倍的峰值 SIMD 性能提升)。在数 据相关度较高的场景或者处理器配置为单发射时,使用单路 PEXTU 可以获得更 高的能效比表现。
CSRU 在传出重定向请求后(这可能出现在写入 SATP 寄存器、异常和中断处理、fence 类指令),与 BPU 机制类似,由后端母模块判断合法性后冲刷流水 线并向前端发送重定向地址。
CSRU 在 LSU 发生异常时会被强制抢占来进行异常处理,因此可能存在 CSR 内原有指令和 LSU 异常处理对 CSRU 的使用冲突。Polaris 后端通过限制 CSRU 指令发射的方式规避这一问题:利用 CSRU 处理的指令必须阻塞,直到在它之前 的指令全部执行完毕才可以发射。通过这样的设计,可以保证 LSU 在执行指令时,CSRU 必然处于闲置状态。由于 CSR 指令在程序中占比较少,故这样的性 能牺牲可以忽略。