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/