NTL.ALL

RISC-V NTL.ALL 指令详解

指令手册R-type HINT (ADD x0, x0, x5)

Zihintntl 所有缓存非时间局部性提示,作用于紧随其后的显式内存访问目标指令。

指令语法

ntl.all

RV32/RV64 Zihintntl 1.0;ntl.all 没有显式操作数,固定字段不表示可选的源或目标寄存器。

32 位 ADD HINT:funct7=0000000、rs2=x5、rs1=rd=x0、funct3=000、opcode=0110011;编码为 0x00500033。

只描述紧随其后的目标指令的显式内存访问;实现可忽略提示,不改变目标指令的架构可见效果。

NTL 不影响 Zicbom 缓存管理;不鼓励后接非显式内存访问指令。目标陷入时,建议忽略提示,而不是将其用于处理程序首条指令。

Zihintntl微架构提示缓存与同步

指令行为说明

NTL.ALL 是 Zihintntl 定义的非时间局部性 HINT,编码为 ADD x0, x0, x5。它表示紧随其后的目标指令的显式内存访问在内存层级的任何缓存层级容量内不具有时间局部性。该提示不改变架构状态,也不改变目标指令的架构可见效果;实现可以自由忽略它。NTL 影响除 Zicbom 缓存管理指令外的所有内存访问指令,也可作用于 Zicbop 预取提示。

NTL.ALL 指令解析动画

从 ADD 字段解码,并展示目标指令条件与架构可见边界。

ntl.all
31..25
24..20
19..15
14..12
11..7
6..0
0000000
funct7
00101
rs2=x5
00000
rs1=x0
000
funct3
00000
rd=x0
0110011
OP
instruction
ntl.all = 0x00500033
opcode
0110011 -> OP/ADD encoding
fixed fields
funct7=0000000, funct3=000, rd=x0, rs1=x0, rs2=x5
target
显式内存访问
hint
可提示该访问在任意缓存层级没有可利用的时间局部性
architectural state
NTL 与目标指令的架构可见效果不变;实现可忽略 HINT

动画只展示非特权 ISA 定义的 NTL 架构语义;不推断特定缓存层级、分配策略、时序或性能结果。

快速理解与检索要点

NTL.ALL 是描述紧随其后指令的显式内存访问局部性的 HINT,不改变目标指令的架构可见效果。

四个 NTL 变体分别描述最内层私有缓存、所有私有缓存、最内层共享缓存和所有缓存的时间局部性范围。
如果目标指令陷入异常,官方建议实现不要把 NTL 应用到 trap handler 的第一条指令。

常见使用场景

缓存与提示

结合 «ntl.all» 等实际代码理解该场景。

并发与多核

结合 «ntl.all» 等实际代码理解该场景。

性能优化

结合 «ntl.all» 等实际代码理解该场景。

使用前检查清单

语法检查
  • RV32/RV64 Zihintntl 1.0;ntl.all 没有显式操作数,固定字段不表示可选的源或目标寄存器。
  • 32 位 ADD HINT:funct7=0000000、rs2=x5、rs1=rd=x0、funct3=000、opcode=0110011;编码为 0x00500033。
语义检查
  • 只描述紧随其后的目标指令的显式内存访问;实现可忽略提示,不改变目标指令的架构可见效果。
  • NTL 不影响 Zicbom 缓存管理;不鼓励后接非显式内存访问指令。目标陷入时,建议忽略提示,而不是将其用于处理程序首条指令。

容易混淆 / 常见误区

只作用于紧随其后的目标指令;后面更远的内存访问不受该 NTL 前缀约束。
这是 HINT,实现可忽略;不能把它作为正确性、同步或一致性机制。
官方建议不要让 NTL 后面跟随不显式访问内存的指令;这样做无架构可见影响,但可能降低性能。
NTL 不影响 Zicbom 的 CBO.CLEAN/CBO.FLUSH/CBO.INVAL,但可影响其他显式内存访问和预取提示。

常见问题

NTL.ALL 会改变下一条 load/store 的结果吗?

不会。它不改变目标指令的架构可见效果。

NTL.ALL 可以被实现忽略吗?

可以。它是 HINT,软件不能依赖它保证性能或正确性。