当值可能相同时,避免写入是否更快

时间:2012-05-19 04:20:44

标签: c memory smp

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

1)x = 0;

2)if(x)x = 0;

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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