parallel-processing - 如何将单个节点的多个核心分配给 MPI 集群中的单个作业/进程?

标签 parallel-processing mpi distributed-computing openmpi mpich

我有一个 MPI 程序,我想在 30 个节点上运行(每个节点有 32 个核心)。如何将节点的所有核心分配给单个作业/进程?

我正在使用槽来限制特定节点的作业数量。 node001 插槽=1 max_slots=20 node002 插槽=1 max_slots=20

我可以使用任何参数来实现此目的吗?

提前致谢。

最佳答案

使用 openmpi,您可以使用选项 --rankfile 显式设置排名。

可以在此处找到该文件的语法:https://www.open-mpi.org/doc/v2.0/man1/mpirun.1.php ^

这是一个非常简单的 MPI+OpenMP 程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sched.h>
#include <mpi.h>
#include <omp.h>

void main(int argc, char** argv)
{
    MPI_Init(&argc, &argv);
    unsigned cpu;
    unsigned node;

    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    #pragma omp parallel
    {
        printf("[%d:%d] %d\n", rank, omp_get_thread_num(), sched_getcpu());
    }
    MPI_Finalize();
}

打印每个 OpenMP 线程的 [MPI_rank:OMP_rank] cpu。

排名文件的基本格式是:

rank <rank>=<host> slot=<slot>:<cores>

使用这个基本的Rankfile(主机=Marvin,一个插槽上有2CPU):

>cat ./rankfile
rank 0=Marvin slot=0:0
rank 1=Marvin slot=0:0
rank 2=Marvin slot=0:0
rank 3=Marvin slot=0:1
rank 4=Marvin slot=0:0-1
rank 5=Marvin slot=0:0

这些是我的打印:

>mpirun -n 6 --rankfile ./rankfile ./main
[0:0] 0
[1:0] 0
[2:0] 0
[3:0] 1
[4:0] 1
[4:1] 0
[5:0] 0

我没有设置 OMP_NUM_THREADS 环境变量,以便让 OpenMP 检测每个等级有多少个核心可用。

希望这对你有帮助

关于parallel-processing - 如何将单个节点的多个核心分配给 MPI 集群中的单个作业/进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695178/

相关文章:

java - 当 ForkJoinPool 结束时

用于并发数据库/REST 调用的 Java 8 parallelStream

c - 如何在 MPI 中的一条消息中分散两个数组

c - MPI_等待: Request pending due to failure

apache-spark - 根据工作线程,内核和DataFrame大小确定Spark分区的最佳数量

symfony - 水平扩展和 cron 作业

haskell - 如何在 Haskell 中使用 rpar 策略并行评估元组?

haskell - Haskell 中的并行映射

python - 设置分布式 ipython/ipyparallel MPI 集群

java - 如何保持对象实例同步