【问题标题】:Can OpenMP oversubscription cause memory errors?OpenMP 超额订阅会导致内存错误吗?
【发布时间】:2018-08-23 13:11:07
【问题描述】:

在混合 MPI/OpenMP 程序中超额订阅 OpenMP 线程的数量会导致 C++ 中并行代码的错误执行吗?不正确是指它不会按预期在并行测试用例中产生输出。

我试图提出一个示例,说明超额订阅本身会导致代码执行失败。我能想到并通过研究发现的唯一原因是,OpenMP 中使用的线程太多导致堆栈溢出。

我提出这个问题的动机是我正在开发一个使用混合 OpenMP / MPI 的大型项目,其中失败的测试数量似乎取决于使用的核心数量。我想这可能是由于问题范围之外的许多问题造成的,但我很想知道仅仅超额订阅是否会导致正确性测试失败。

【问题讨论】:

    标签: c++ multithreading mpi openmp shared-memory


    【解决方案1】:

    不会。在正常运行的硬件上正确的格式良好的并行程序不会因为超额订阅而变得不正确。

    超额订阅根本没有违反正确性假设。想象一个非固定的程序 - 它的一个线程可以由处理器迁移到已经在执行另一个线程的核心。在本地,这类似于超额认购,一定不能错。

    由于资源不足,您可能会遇到严重的性能下降或程序终止。当然,一个似乎以前运行过的不正确的程序,在超额订阅下运行时可以揭示它的缺陷。超额认购可能会表现出暴露现有硬件问题的模式。

    【讨论】:

    • 确实如此。困难在于找到不正确或格式不正确的组件,而这些组件仅在极端负载下才会显现出来。
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多