【问题标题】:Is it faster to avoid writes when the values might be the same当值可能相同时避免写入是否更快
【发布时间】:2012-05-26 14:19:24
【问题描述】:

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

1) x = 0;

2) 如果 (x) x = 0;

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

【问题讨论】:

  • 缓存一致性确实有一些成本,分支预测(使用另一个缓存)也是如此。你用一个换另一个 - 这是赢还是输?谁知道呢。

标签: c memory smp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-02-20
      • 2014-11-18
      • 2012-11-17
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多