增加具有不同线程数的2个交替OpenMP并行区域的内存消耗
当我在具有不同线程数的 2 个 OpenMP 并行区域之间反复交替时,内存消耗会无限增加(数十 MB 甚至更多)。它甚至在这样一个简单的代码片段中也能做到这一点:
#include <unistd.h>
int main() {
while (true) {
#pragma omp parallel num_threads(16)
usleep(30);
#pragma omp parallel num_threads(8)
usleep(30);
}
return 0;
}
正如我在相关问题中已经发现的那样,在我的系统上,8 个线程一直被重用,而其余 8 个线程在每次进入 16 线程部分时新创建。虽然创建和销毁线程可能是 OpenMP 的预期行为,但不断增加的内存使用量看起来像是内存泄漏。对于具有相同线程数的 2 个部分,一切正常。有没有人知道这是什么原因,如果我坚持在每个部分使用不同数量的线程,我可以做什么?
我在 Ryzen 8 核 16 线程机器上使用 Ubuntu 18.04 和 GOMP 形式的 gcc 8.4.0(7.5.0 有同样的问题)。
这个问题是一个精简版的前一个问题做一个最小的工作例如避免不必要的信息。