4

在 SMP 机器上,#2 与 #1 相比有性能优势:

1) x = 0;

或者

2) 如果 (x) x = 0;

我在想管理 CPU 之间的缓存一致性的幕后开销可能会有一些成本。我疯了吗?

4

2 回答 2

4

即使使用单线程代码,如果对象位于写时复制内存中(例如,文件的私有映射,或分叉后的几乎任何可写内存),后者也有优势。我怀疑您所询问的优势也是真实的,至少在 x86 等自动处理内存一致性的系统上。在此类机器上,写入可能位于另一个 cpu 缓存中的内存将使缓存副本(实际上是整个缓存行)无效。只是阅读不会有任何害处。当然,如果这是可能被多个线程修改和共享的内存,那么无论如何它都需要受到同步机制的保护,那么您可能会失去大部分或全部优势。

于 2012-05-19T04:39:24.893 回答
3

即使您正在阅读,它也必须管理缓存一致性,所以我认为它不会给您带来任何好处。它还将在很大程度上取决于编译器的功能。如果您真的在乎,我会在您使用的系统上对其进行基准测试。

于 2012-05-19T04:24:14.503 回答