【发布时间】:2014-05-28 11:21:14
【问题描述】:
Eric Lippert 在他的blog post 中说:
我注意到,在基于 x86 的硬件上,实际上从未观察到这种特殊的写入重新排序;这些 CPU 不执行此优化。
这是否意味着 x86 CPU 不存在在讨论读写的易变性和重新排序时所讨论的任何问题,或者他的意思是仅在此示例中 CPU 不会重新排序?
在 x86_64 CPU 中会发生哪些类型的重新排序以及在哪些情况下?
【问题讨论】:
-
为此使用Intel Processor manuals。内存排序规则在第 3A 卷第 8.2.2 章中描述
-
我的意思是我所说的:x86 不会重新排序两个相对于彼此的写入。然而,它确实重新排序读取相对于写入;读取可以在时间上逻辑地向后移动,或者在时间上逻辑地向前移动。想象一下,您有主内存,并且芯片上有主内存的副本。如果您从主存储器预取一个页面到芯片上以获取一个字节,那么这实际上是提前读取了该页面的 all ;如果您随后从该页面获得另一个字节,则它已被复制。如果您写入副本,该写入可能会在稍后被刷新,延迟写入。
-
您还应该阅读该文章的后续文章:blog.coverity.com/2014/03/26/reordering-optimizations
标签: c# optimization clr cpu