NTL.S1

RISC-V NTL.S1 指令详解

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

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

指令语法

ntl.s1
操作数说明
本指令为 R-type HINT (ADD x0, x0, x4) 格式,请根据汇编语法确认各操作数位置。
Zihintntl微架构提示缓存与同步

指令行为说明

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

NTL.S1 指令解析动画

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

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

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

快速理解与检索要点

NTL.S1 是非时间局部性前缀 HINT,用来描述下一条显式内存访问的预期复用情况,而不是改变该访问的架构语义。

四个 NTL 变体只在缓存层级范围上不同:P1、PALL、S1、ALL。
如果目标指令陷入异常,官方建议实现不要把 NTL 应用到 trap handler 的第一条指令。

常见使用场景

缓存与提示

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

并发与多核

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

性能优化

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

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

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

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

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

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