我想念cc-NUMA架构以及需要刷新变量。我们都知道,如果两个线程修改相同的高速缓存行,那么“错误共享”条件将上升,迫使高速缓存行再次重新加载。 那么为什么我们需要刷新变量才能生成线程交换信息呢? 假设您在串行区域中声明:
int flag=0;
然后在并行区域中,线程0分配共享变量:
flag=1;
将线程1:
while (!flag){}
循环没有刷新就终止了吗?如果不是,为什么我们采用cc-NUMA架构?
答案 0 :(得分:1)
不要忘记编译器还可以执行导致上述代码中断的优化,而不仅仅是CPU。
因此,我认为无论硬件支持缓存一致性,仍然需要刷新。