【发布时间】:2018-03-26 17:47:40
【问题描述】:
我有时会看到这样的优化代码:
if (matrix[t] != 0) {
matrix[t] = 0;
}
与仅此代码相反:
matrix[t] = 0;
我认为这样编写代码是为了减少 CPU 中的内存带宽。这是对典型 CPU 的良好优化(当值可能已经为 0 时)?为什么?
这对 MESI 状态意味着什么:是否存在状态转换,例如如果我将相同的值写回缓存行(写入但不修改),共享到修改?或者这对于 CPU 来说是否太复杂而无法检测到?
典型的 CPU(或至少一些)是否针对这种情况进行了优化?
【问题讨论】:
-
读取可能比写入慢(处理器必须等待往返),所以我不认为这是一种优化。 (然后如果读取产生了某些东西,则通过写入来增加更多带宽)。写入不一定会增加 DRAM / 慢速内存带宽,从而减慢每个人的速度,直到从缓存中驱逐。如果写入会通过/绕过缓存并且不会导致空间被缓存,那么确保这是一种优化。 (写完)。
标签: caching optimization cpu x86-64 mesi