OpenMP 超额订阅会导致内存错误吗?

Can OpenMP oversubscription cause memory errors?

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

我想举一个超额订阅本身导致代码执行失败的例子。我能想到并通过研究找到的唯一原因是 OpenMP 中使用了太多线程,导致堆栈溢出。

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

否。正常运行的硬件上正确的well-formed并行程序不会因超额订阅而变得不正确。

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

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