执行顺序一致性存储时,x86指令LOCK XCHG
和MOV+MFENCE
之间的逻辑和性能有何不同。
(我们忽略XCHG
的加载结果; gcc以外的编译器将其用于商店+内存屏障效果。)
是否正确,对于顺序一致性,在执行原子操作期间:LOCK XCHG
仅锁定单个缓存行,反之亦然MOV+MFENCE
锁定整个缓存L3(LLC)?
答案 0 :(得分:0)
不同之处在于使用目的。
当我们锁定可从两个或多个线程访问的内存区域的一部分时,MFENCE(或SFENCE或LFENCE)非常有用。当我们原子地为这个内存区域设置锁时,我们可以在之后使用所有非原子指令,因为有更快的。但是在解锁内存区域之前,我们必须调用SFANCE(或MFENCE)一条指令,以确保锁定的内存对所有其他线程都是正确可见的。
如果我们只更改单个内存对齐变量,那么我们使用像LOCK XCHG这样的原子指令,因此不需要锁定内存区域。