MPI 程序只在 slurm 脚本中执行一次
MPI program only executed once in slurm script
我已经尝试 MPI_Get_processor_name()
和 gethostname()
来打印我使用过的所有节点。但是它只有returns第一个节点的名称!谁能告诉我问题出在哪里以及如何获取所有节点的名称?
//testMPI.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello world from processor %s, rank %d"
" out of %d processors\n", processor_name, world_rank, world_size);}
MPI_Finalize();
}
我使用作业脚本 运行 它:
#!/bin/bash
#SBATCH --job-name=MPI-host
#SBATCH --account=123
#SBATCH --time=00:02:00
#SBATCH --mem-per-cpu=3900M
#SBATCH --ntasks-per-node=16
#SBATCH --nodes=4
#SBATCH --output=./output-mpi-host-test2.out
module load intel/2015.3
module load openmpi.intel/1.8.6
cp $(pwd)/ $SCRATCH
cd $SCRATCH
./
在 SLURM srun
的情况下,需要使用 mpiexec
或批处理系统特定命令启动 MPI 程序。将脚本中的最后一行替换为
srun ./
注意:它会自动从作业脚本中获取参数。对于普通 mpiexec
,您应该提供进程数和其他参数。
我已经尝试 MPI_Get_processor_name()
和 gethostname()
来打印我使用过的所有节点。但是它只有returns第一个节点的名称!谁能告诉我问题出在哪里以及如何获取所有节点的名称?
//testMPI.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello world from processor %s, rank %d"
" out of %d processors\n", processor_name, world_rank, world_size);}
MPI_Finalize();
}
我使用作业脚本 运行 它:
#!/bin/bash
#SBATCH --job-name=MPI-host
#SBATCH --account=123
#SBATCH --time=00:02:00
#SBATCH --mem-per-cpu=3900M
#SBATCH --ntasks-per-node=16
#SBATCH --nodes=4
#SBATCH --output=./output-mpi-host-test2.out
module load intel/2015.3
module load openmpi.intel/1.8.6
cp $(pwd)/ $SCRATCH
cd $SCRATCH
./
在 SLURM srun
的情况下,需要使用 mpiexec
或批处理系统特定命令启动 MPI 程序。将脚本中的最后一行替换为
srun ./
注意:它会自动从作业脚本中获取参数。对于普通 mpiexec
,您应该提供进程数和其他参数。