【问题标题】:Does an explicit openmp flush lead to a cache line flush?显式的 openmp 刷新会导致缓存行刷新吗?
【发布时间】:2013-10-20 17:36:22
【问题描述】:

我一直在尝试理解 openmp 编译指示,openmp 刷新 (#pragma omp flush) 会导致缓存行刷新吗?

对于隐式刷新有什么变化?

【问题讨论】:

    标签: caching openmp flush


    【解决方案1】:

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

    但是,FLUSH 指令可以充当内存屏障或栅栏,并且它还强制编译器为其可能已存储在寄存器中的值生成存储指令。

    对指令here 有很好的描述,包括以下注释:

    Q17: !$omp flush 指令在缓存一致性系统上是必需的吗?

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

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

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

    【讨论】:

    • 谢谢,这就解释了。
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多