提问人:NoseKnowsAll 提问时间:11/17/2023 更新时间:11/17/2023 访问量:32
具有空闲 MPI 列/内核的程序是否可以将空闲的底层内核用作非空闲列的 OpenMP 线程?
Can one program with idle MPI ranks/cores utilize the idle underlying cores as OpenMP threads for the non-idle ranks?
问:
我遇到了纯 MPI 和混合 MPI+OpenMP 之间的边缘情况,我不确定如何让 MPI+OpenMP 做我想做的事,但也担心我遇到了 XY 问题。
假设我在一台具有 64 个内核的机器上运行一个由 A 和 B 两部分组成的程序。这些部分永远不会并行执行。在执行 A 部分期间,我可以使用所有 64 个内核作为 MPI 等级。在执行 B 部分期间,我只能使用 8 个 MPI 列。如果我将每个核心映射到一个等级,那么 A 部分会充分利用我的机器,但 B 部分会给我留下空闲的核心。我想使用这些空闲内核来加速在 8 个 MPI 列上运行的 B 部分的执行。64-8=56
我知道如何做到这一点的唯一方法是,如果 B 部分是它自己的程序。然后 B 部分本身可能是一个混合 MPI+OpenMP 程序,其中有 8 个 MPI 列,每个列映射到一组 8 个内核,其中 OpenMP 可用于通过将每个内核作为 OpenMP 线程运行来加速执行。是否可以将 B 部分复制为它自己的程序,但实际上它只是一个程序的 B 部分,该程序也运行前面描述的 A 部分?
如果重要的话,我正在用 C++ 编写所有内容。
答: 暂无答案
评论
omp_set_num_threads(8)