CPU寄存器和Cache一致性
-
21-09-2019 - |
题
什么是CPU寄存器和CPU高速缓存之间的关系,当涉及到高速缓存一致性协议,例如MESI?如果某个值存储在CPU的缓存,并被存储在寄存器中,那么会发生什么,如果缓存线将被标记为“脏”?我的理解是没有gurentee该寄存器将更新,即使高速缓存被更新(由于MESI)它的价值。
亨奇此代码:
static void Main()
{
bool complete = false;
var t = new Thread (() =>
{
bool toggle = false;
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep (1000);
complete = true;
t.Join(); // Blocks indefinitely
}
(让我们假定编译器没有优化的外循环为“完整的”负载),点击 以我的理解,因为它的值保持寄存器内更新“完整”是不是第二个线程可见(CPU 2的缓存是更新不过)。
确实放置一个存储器屏障力以“刷新”所有的寄存器?什么寄存器缓存的关系?和约寄存器和存储器障碍什么?
解决方案
没有关系。使用 “易失性” 关键字。
其他提示
在x86平台保证高速缓存一致性使用MESI协议,即,在一个CPU高速缓存改变被自动地传播到其它CPU的高速缓存。 因此易失性关键字在x86和x64是有用的,只有以防止重新排序。
不隶属于 StackOverflow