assembly - clwb 是否负责写入存储缓冲区?

标签 assembly x86 x86-64 cpu-architecture persistent-memory

Intel 软件手册说 clwb将包含线性地址的缓存行(如果修改)写回内存,该线性地址由缓存中缓存层次结构的任何级别的内存操作数指定一致性域。该行可能会以未修改状态保留在缓存层次结构中。clwb 是相对于对正在写回的缓存行的较旧写入排序的

我的问题是,在下面的伪代码中

write(A)
clwb (A)

clwb 是否负责写入存储缓冲区?或者在使用 clwb 之前,我是否需要在写入之后进行屏蔽,例如

write (A)
sfence
clwb (A)

我想知道“sfence”是否真的需要? 谢谢

最佳答案

在 Intel 处理器上,clwb 指令根据对同一缓存行的旧写入进行排序。在 AMD 处理器上,根据第 24593 号 AMD 手册第 2 卷第 7.6.3 节,如果目标的内存类型地址是执行 clwb 指令时的可缓存内存类型(即 WB、WT 或 WP)。

这种顺序保证意味着,如果有必要,在退出 clwb 说明。请注意,持久域由平台定义。

关于assembly - clwb 是否负责写入存储缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63752086/

相关文章:

assembly - 栅栏如何原子化加载-修改-存储操作?

c++ - FPU,SSE 单 float 。哪个更快?低于或高于

assembly - 在6502组件中绘制位图

assembly - x86 程序集 : Data in the Text Section

c - x86_64 对齐堆栈并在不保存寄存器的情况下恢复

c++ - 原子变量是无锁的吗?

linux - 64 位 linux 内核如何从 ELF 启动 32 位进程

assembly - 没有函数包含所选帧的程序计数器

c - 英特尔 FMA 指令提供零性能优势

assembly - 用汇编语言打印一个数字?