CLDEMOTE

缓存行删除

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 1C /0CLDEMOTE m8 Op/En Operand A ModRM:rA有效有效提示到硬件将包含 m8 的缓存线移动到缓存的更远的级别,而不写入 mem- ory 。 在 struction Opera nd Encoding1 1 操作数 2 操作数 3 操作数 4 / m (w) N/A N/A N/A /A

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

A

  1. modrm.rm escrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

实测开销

正在从 arch-data 加载实测数据...

说明

提示硬件,包含与 内存操作数 指定的线性地址的缓存行应该从最接近处理器核心的缓存(s)移动到更远离处理器核心的关卡(demoted). 这可能会加速同一一致性域内其他核心后续对线的访问,特别是如果线由降级线的核心所写. 以这样的方式移动线条是一种性能优化,即这是一个不修改建筑状态的提示. 硬件可能选择缓存层级中的哪个级别来保留行(例如典型服务器设计的L3). 源操作数是一个字节内存位置.

CLDEMOTE指令的可用性通过CPUID特征旗CLDEMOTE(子叶 07H中ECX注册的位数25,参见"CPUID-CPU识别")的存在来表示. 在不支持 CLDEMOTE 指令(包括遗留硬件)的处理器上,该指令将被作为 NOP 处理.

CLDEMOTE指令针对存储到同一缓存行,但针对其他指令,包括内存栅栏,CLDEMOTE,CLWB或CLFLUSHOPT指令针对不同的缓存行,则未下达指令. 由于CLDEMOTE将退役,以便存储到同一缓存行,软件应确保在发布CLDEMOTE后,同一核心不再立即访问该行,以避免缓存数据移动处罚.

包含受影响行的页面的有效内存类型决定了效果;可缓存类型有可能生成数据移动操作,而不可缓存类型可能导致指令被忽略.

分拣可以随时发生,不与指令执行挂钩. CLDEMOTE指令不是针对PREFETCHh指令或任何投机获取机制下达的。 也就是说,数据可以在CLDEMOTE指令执行之前、期间或执行之后被推测地加载到缓存行中,以引用缓存行。

与CLFLUSH,CLFLUSHOPT,以及CLWB指令不同,CLDEMOTE不能保证将修改后的数据写入内存.

CLDEMOTE指令在某些情况下可能被硬件忽略,而不是保证.

CLDEMOTE指令可以用于所有特权级别. 在某些处理器执行中,CLDEMOTE指令可以在页面表中设置A位而不是D位.

如果在缓存中找不到该行,则该指令将作为NOP处理.

在一些执行中,CLDEMOTE指令可能总是用交易同步扩展(TSX)导致交易中止. 然而,程序员不得依赖CLDEMOTE指令强制交易中止.

  1. 联合国 ModR/M字节的Mod字段不能有值11B.

行动

Cache_Line_Demote(m8);

受影响的旗帜

None.

C/C++ 编译器内置等效 CLDEMOTE 空格 cldemote(空格 *);

异常

保护模式
#UD如果使用 LOCK 前缀 。
实地址模式
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
与真实地址模式相同的例外 。
兼容模式
与保护模式中的例外相同.
64 位模式
#UD如果使用 LOCK 前缀 。

来源