显式openmp flush是否会导致缓存行刷新?

时间:2013-10-20 17:36:22

标签: caching openmp flush

我一直试图了解openmp pragma,openmp flush(#pragma omp flush)是否导致缓存行刷新?

隐式同花怎么改变?

1 个答案:

答案 0 :(得分:3)

如果您正在使用具有连贯缓存(大多数主流机器)的计算机,则通常不需要缓存行刷新,并且flush指令不太可能对缓存执行任何明确的操作。在一个连贯的系统中,任何写入一个内核缓存的内容都可以立即被所有其他内核看到。

然而,FLUSH指令可能充当内存屏障或栅栏,它还会强制编译器为可能存储在寄存器中的值生成存储指令。

对指令here有一个很好的描述,包括这个说明:

  

问题17:缓存一致性系统上是否需要!$ omp flush指令?

     

A17:是的,必须使用冲洗指令。查看OpenMP规范,了解其用途示例。该指令对于指示编译器必须向存储器系统写入/读取变量是必要的,即该变量不能通过代码中的flush“语句”保存在本地CPU寄存器中。

     

高速缓存一致性确保如果一个CPU从/向内存执行读或写指令,则系统中的所有其他CPU在访问它时将从该内存地址获得相同的值。所有缓存都将显示一致的值。但是,在OpenMP标准中,必须有一种方法来指示编译器实际插入读/写机器指令而不是推迟它。在为循环生成高效的机器语言代码时,将变量保存在循环中的寄存器中非常常见。

如果您使用的是具有非相干缓存的计算机,您可能正在超级计算机上工作,应该咨询熟悉您的架构和工具集的当地专家。