首页/指令库/暂停提示
PAUSE

RISC-V PAUSE 指令详解

指令手册I-type

Zihintpause 有界暂停提示,表示当前 hart 的指令退休率可被临时降低或暂停。

指令语法

pause
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数所在的寄存器。
立即数 imm:12 位有符号立即数,符号扩展后与 rs1 进行运算。
Zihintpause微架构提示

指令编码

31..20
imm[11:0]
19..15
rs1
14..12
funct3
11..7
rd
6..0
opcode

PAUSE 使用 opcode 0001111(0x0f)、funct3 000。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。

格式: I-type
opcode: 0001111 (0x0f)
funct3: 000 (0x0)

指令行为说明

PAUSE 是 Zihintpause 扩展定义的 HINT,编码为 FENCE 形式:pred=W、succ=0、fm=0、rd=x0、rs1=x0。它提示实现当前 hart 可能处于自旋等待序列中,指令退休率可被临时降低或暂停;该效果持续时间必须有界,也可以为 0。由于 successor set 为空,PAUSE 不强制任何内存排序。

快速理解与检索要点

PAUSE 告诉实现当前 hart 可能在自旋等待;它可以降低或暂停退休率,但效果必须有界且可以为零。

PAUSE 编码在 FENCE opcode 中,但 successor set 为空,因此不强制内存排序。
它适合自旋等待循环,不是通用延时指令,也不是同步原语。

常见使用场景

原子操作与同步

结合 «pause # hint for spinlock busy-wait loop» 等实际代码理解该场景。

并发与多核

结合 «pause # hint for spinlock busy-wait loop» 等实际代码理解该场景。

节能优化

结合 «pause # hint for spinlock busy-wait loop» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 I-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

PAUSE 是性能/能耗提示,不保证具体暂停时长、节能效果或调度效果。
PAUSE 不提供内存排序;不能替代 FENCE、原子操作或锁协议。
官方建议在可移植自旋等待循环中每次重新检查条件前通常只放一个 PAUSE。
PAUSE 和其他 FENCE 指令一样,不能放在 LR/SC 序列中,否则会破坏前向进展保证。

常见问题

PAUSE 会保证等待固定时间吗?

不会。官方只要求效果有界,并且持续时间可以为 0。

PAUSE 能替代 FENCE 吗?

不能。PAUSE 不强制任何内存排序。