如何将单个节点的多个核心分配给MPI集群中的单个job/process?
How to assign multiple cores of a single node to single job/process in MPI cluster?
我有一个 MPI 程序,我想在 30 个节点(每个节点有 32 个核心)上 运行。如何将节点的所有核心分配给单个 job/process?
我正在使用插槽来限制特定节点的作业数。
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>
有了这个基本的排名文件(Host=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 检测每个等级有多少核心可用。
希望对您有所帮助
我有一个 MPI 程序,我想在 30 个节点(每个节点有 32 个核心)上 运行。如何将节点的所有核心分配给单个 job/process?
我正在使用插槽来限制特定节点的作业数。 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>
有了这个基本的排名文件(Host=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 检测每个等级有多少核心可用。
希望对您有所帮助