CLDEMOTE
缓存行删除
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 1C /0 | CLDEMOTE m8 Op/En Operand A ModRM:r | A | 有效 | 有效 | 提示到硬件将包含 m8 的缓存线移动到缓存的更远的级别,而不写入 mem- ory 。 在 struction Opera nd Encoding1 1 操作数 2 操作数 3 操作数 4 / m (w) N/A N/A N/A /A |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmescrituraModRM 字节的 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指令强制交易中止.
- 联合国 ModR/M字节的Mod字段不能有值11B.
行动
Cache_Line_Demote(m8);受影响的旗帜
None.
C/C++ 编译器内置等效 CLDEMOTE 空格 cldemote(空格 *);
异常
保护模式
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
| 与真实地址模式相同的例外 。 |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#UD | 如果使用 LOCK 前缀 。 |