【发布时间】:2012-05-26 14:19:24
【问题描述】:
在 SMP 机器上,#2 与 #1 相比有性能优势:
1) x = 0;
或
2) 如果 (x) x = 0;
我在想管理 CPU 之间的缓存一致性的幕后开销可能会有一些成本。我疯了吗?
【问题讨论】:
-
缓存一致性确实有一些成本,分支预测(使用另一个缓存)也是如此。你用一个换另一个 - 这是赢还是输?谁知道呢。
在 SMP 机器上,#2 与 #1 相比有性能优势:
1) x = 0;
或
2) 如果 (x) x = 0;
我在想管理 CPU 之间的缓存一致性的幕后开销可能会有一些成本。我疯了吗?
【问题讨论】:
即使您正在阅读,它也必须管理缓存一致性,所以我认为它不会给您带来任何好处。它还将在很大程度上取决于编译器的功能。如果您真的关心,我会在您使用的系统上对其进行基准测试。
【讨论】:
即使是单线程代码,如果对象位于写时复制内存中(例如,文件的私有映射,或 fork 之后的几乎任何可写内存),后者也有优势。我怀疑您所询问的优势也是真实的,至少在像 x86 这样的内存一致性自动处理的系统上。在这样的机器上,写入可能位于另一个 cpu 缓存中的内存将使缓存的副本(实际上是整个缓存行)无效。只是阅读不会有任何害处。当然,如果这是可能被多个线程修改和共享的内存,则无论如何都需要通过同步机制来保护它,那么您可能会失去大部分或全部优势。
【讨论】: