Multithreading 如果我们将内存标记为WC(Write Combined),那么我们会自动获得一致性吗?

Multithreading 如果我们将内存标记为WC(Write Combined),那么我们会自动获得一致性吗?,multithreading,concurrency,x86,x86-64,memory-fences,Multithreading,Concurrency,X86,X86 64,Memory Fences,正如我们所知,在x86体系结构上,自动获得发布一致性——即自动订购的所有操作没有任何围栏,不包括第一次存储和下一次加载操作。(正如赫伯·萨特在第34页所说:) 如果我们将MFENCE(LFENCE+SFENCE)放在它们之间,那么存储不能重新排序,加载也不能重新排序-即我们提供了顺序一致性 但是,如果我们将内存标记为WC(Write Combined),那么我们是否自动具有任何一致性,而没有任何围栏,可能是获得释放 或者如果我们使用带有WC内存的SSE指令,那么我们就没有任何一致性,如果我们使用

正如我们所知,在x86体系结构上,自动获得发布一致性——即自动订购的所有操作没有任何围栏,不包括第一次存储和下一次加载操作。(正如赫伯·萨特在第34页所说:)

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

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


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

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

一致性也不能保证。

如下所述:

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


我认为WC内存没有“自动一致性”,因为对内存的最终写入“不一定按照与先前编程存储执行相同的顺序写入内存”。

我仅对内存映射区域(PCIe条)使用WC内存,这是非常必要的。例如,我没有问题:我是否必须使用WC。但我有一个问题:通过使用MOV和SSE/AVX,我们的WC内存是否自动保持一致性?谢谢。关于您的引文“当WCB最终通过FSB转储到外部内存时,数据不一定按照与先前编程存储执行相同的顺序写入内存。”第1080页“WCB FSB事务”-这是否适用于任何通过DDR链路和PCI Express的WCB sotres,还是仅适用于FSB?