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

RISC-V PAUSE 指令详解

指令手册I-type

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

指令语法

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

指令行为说明

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

PAUSE 指令解析与排序动画

展示 FENCE opcode 编码、fm/pred/succ 字段,以及当前 hart 操作可见顺序约束;不模拟 cache、总线或流水线。

无显式操作数
pausepause
执行环境当前 hart 可见顺序约束有界提示,可为 0
31..28
27..24
23..20
19..15
14..12
11..7
6..0
0000
fm
0001
pred
0000
succ
00000
rs1=x0
000
funct3
00000
rd=x0
0001111
MISC-MEM
instruction
0x0100000F
opcode
0001111 -> MISC-MEM/FENCE
fm
0000
pred
0001 -> W
succ
0000 -> empty
reserved
rs1=x0, rd=x0, funct3=000
ordering
自旋等待提示;succ 为空,因此不强制内存排序
complete
bounded hint complete

该动画只展示 RISC-V 非特权 ISA 定义的 FENCE/PAUSE 架构语义;不表示任何具体处理器的暂停时长、缓存行为、互连协议或执行成本。

快速理解与检索要点

PAUSE 是 FENCE 形式的自旋等待提示。它可以让实现有界地降低或暂停当前 hart 的退休率,但 succ=0 意味着不强制任何内存排序。

PAUSE 编码为 fm=0、pred=W、succ=0、rs1=x0、rd=x0 的 FENCE 形式。
successor set 为空,因此 PAUSE 不强制内存排序。
暂停效果必须有界,并且持续时间可以为 0。
PAUSE 适合自旋等待循环,不是同步原语或固定延时指令。

常见使用场景

原子操作与同步

结合 «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 的 successor set 为空,不强制任何内存排序。

PAUSE 是普通 NOP 吗?

它是 HINT;实现可以降低或暂停当前 hart 的退休率,但也允许效果持续 0 时间。