当前位置:  开发笔记 > 编程语言 > 正文

如果数据已经在缓存中,那么非临时存储会发生什么?

如何解决《如果数据已经在缓存中,那么非临时存储会发生什么?》经验,为你挑选了1个好方法。

当你使用非临时存储,例如movntq,并且数据已经在缓存中时,存储会更新缓存而不是写入内存吗?或者它会更新缓存行并写出来,驱逐它吗?或者是什么?

这是一个有趣的困境.假设线程A正在加载包含x和y的缓存行.线程B使用NT存储写入x.线程A写入y.这里有数据竞争,如果B的存储到x可以在A的负载发生时传输到内存.如果A看到x的旧值,但是X的写入已经发生,那么稍后写入y并最终写回高速缓存行将破坏不相关的值x.我假设处理器以某种方式防止这种情况发生?我不知道如果有可能的行为,任何人都可以使用NT商店构建一个可靠的系统.



1> David Schwar..:

您描述的所有行为都是非临时存储的合理实现.实际上,在现代x86 CPU上,实际的语义是对L1缓存没有影响,但L2(和更高级别的缓存,如果有的话)不会驱逐缓存行来存储非时间提取结果.

没有数据竞争,因为缓存是硬件一致的.通过决定驱逐高速缓存行不会以任何方式影响这种一致性.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有