如果我们将内存标记为WC(写入组合),那么我们是否自动具有任何一致性?

时间:2014-09-08 06:51:11

标签: multithreading concurrency x86 x86-64 memory-fences

正如我们在x86架构上所知,获取 - 释放一致性自动提供 - 即所有操作自动排序而没有任何围栏,排除第一个存储和下一个加载操作。 (正如第34页上的Herb Sutter所说:https://onedrive.live.com/view.aspx?resid=4E86B0CF20EF15AD!24884&app=WordPdf&authkey=!AMtj_EflYn2507c

如果我们在它们之间放置 MFENCE(LFENCE + SFENCE),则无法重新排序存储,并且无法重新排序加载 - 即我们提供顺序一致性

但是如果我们将内存标记为 WC(写入组合),那么我们是否自动拥有任何一致性而没有任何围栏,可能是获取释放?

或者如果我们在WC内存中使用 SSE 指令,那么我们没有任何一致性,如果我们使用简单的 MOV 指令和WC内存,那么我们有获得释放的一致性,不是吗?

2 个答案:

答案 0 :(得分:1)

如上所述:How MTRR registers implemented?

WC存储器的存储:WC存储器类型非常适合具有以下特征的存储器区域(例如,视频帧缓冲器): 1.处理器不从WC内存缓存。 2.允许从WC存储器中推测执行负载。 3.存储器的存储器存储在处理器的写组合缓冲器(WCB)中。 4.每个WCB可以容纳一行(64字节数据)。 5.当存储器执行到一行WC存储器空间时,字节在WCB中累积,分配给记录写入该行存储器空间的WCB。 6. WCB中某个位置的后续存储可以覆盖由较早的商店存放在该位置的字节到该位置。换句话说,折叠对同一位置的多次写入,以便该位置反映写入该位置的最后一个数据字节。 7.当WCB最终通过FSB转储到外部存储器时,数据不一定按照执行早期程序存储的顺序写入存储器。被写入的设备必须容忍这种类型的行为(即,它必须正确运行)。参见" WCB FSB交易"有关更多信息,请参阅第1080页。

我相信没有"自动一致性"对于WC内存,因为最终写入内存是"不一定按照执行早期程序存储的相同顺序写入内存"。

答案 1 :(得分:0)

这是一个坏主意,WC内存读取速度很慢(慢20倍),需要使用特殊的SSE / AVX2指令来加速它。使用MFENCE要快得多。

也不保证一致性。