3

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

如果我们将MFENCE(LFENCE+SFENCE)放在它们之间,那么存储就不能重新排序,加载也不能重新排序——即我们提供了顺序一致性

但是如果我们将内存标记为WC(Write Combined),那么我们是否会自动保持一致性而没有任何栅栏,可能是获取释放?

或者如果我们将SSE指令与 WC-memory 一起使用,那么我们就没有任何一致性,如果我们将简单的MOV指令与 WC-memory 一起使用,那么我们就有了获取-释放一致性,不是吗?

4

2 回答 2

1

如此处所述:如何实现 MTRR 寄存器?

存储到 WC 内存:WC 内存类型非常适合具有以下特性的内存区域(例如,视频帧缓冲区): 1. 处理器不缓存 WC 内存。2. 允许从 WC 内存中推测性地执行加载。3. 对 WC 内存的存储存储在处理器的写入组合缓冲区 (WCB) 中。4. 每个 WCB 可容纳 1 行(64 字节数据)。5. 当对一行 WC 内存空间执行存储时,字节在 WCB 中累积,用于记录对该行内存空间的写入。6. 对 WCB 中某个位置的后续存储可以覆盖由先前存储在该位置存储到该位置的字节。换句话说,对同一位置的多次写入将被折叠,以便该位置反映写入该位置的最后一个数据字节。7. 当 WCB 最终通过 FSB 转储到外部存储器时,数据不一定以与执​​行早期程序存储相同的顺序写入内存。被写入的设备必须容忍这种类型的行为(即,它必须正常工作)。有关详细信息,请参阅第 1080 页上的“WCB FSB 事务”。

我相信 WC 内存没有“自动一致性”,因为最终写入内存“不一定以与执​​行早期程序存储相同的顺序写入内存”。

于 2014-09-08T12:40:23.993 回答
0

这是一个坏主意,WC 内存读取速度非常慢(慢了 20 倍)并且需要使用特殊的 SSE/AVX2 指令来加速它。使用 MFENCE 明显更快。

也不保证一致性。

于 2014-09-08T09:00:01.450 回答