微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

clwb是否负责存储缓冲区中的写操作?

如何解决clwb是否负责存储缓冲区中的写操作?

Intel软件手册上说 clwb 将缓存行(如果已修改)写回内存,该行包含从缓存中任何级别的缓存层次结构中使用内存操作数指定的线性地址相干域。该行可能以未修改的状态保留在缓存层次结构中。clwb相对于对要回写的缓存行的较早写入而排序

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

write(A)
clwb (A)

clwb可以处理存储缓冲区中的写入吗?还是在写完之后是否需要在使用clwb之类的情况下进行防护,例如

write (A)
sfence
clwb (A)

我想知道是否确实需要“科学证明”? 谢谢

解决方法

在Intel处理器上,关于对同一高速缓存行的较早写入,对clwb指令进行了排序。在AMD处理器上,根据AMD手册第24593卷第2卷的7.6.3节,如果目标地址的存储类型为同一个高速缓存行,则对同一高速缓存行的较旧写入将对clwb指令进行排序。执行clwb指令时的可缓存内存类型(即WB,WT或WP)。

此顺序保证意味着,在需要退回clwb指令后的某个时间点,如果需要,最终会将行的最新状态或程序顺序的后一状态最终写回持久性域。请注意,持久性域是由平台定义的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。