系统安装了2种类型的MPI库及编译器,使用时务必使用SLRUM调度系统提交任务。2种MPI类型分别为:

Intel MPI

使用时添加相应的环境变量:

$ module load intel

使用示例:
假设有如下 mpitest.c 程序,内容如下: 

#include "mpi.h"
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
int i, rank, size, namelen;
char name[MPI_MAX_PROCESSOR_NAME];
MPI_Status stat;
MPI_Init (&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &size);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Get_processor_name (name, &namelen);
if (rank == 0) {
printf ("Hello world: rank %d of %d running on %s\n", rank, size, name);
for (i = 1; i < size; i++) {
MPI_Recv (&rank, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &stat);
MPI_Recv (&size, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &stat);
MPI_Recv (&namelen, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &stat);
MPI_Recv (name, namelen + 1, MPI_CHAR, i, 1, MPI_COMM_WORLD, &stat);
printf ("Hello world: rank %d of %d running on %s\n", rank, size, name);
}
} else {
MPI_Send (&rank, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
MPI_Send (&size, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
MPI_Send (&namelen, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
MPI_Send (name, namelen + 1, MPI_CHAR, 0, 1, MPI_COMM_WORLD);
}
MPI_Finalize ();
return (0);
}

使用mpiicc进行编译,生成mpitest可执行文件:
$ mpiicc -o mpitest mpitest.c
$ ls mpitest*
 mpitest mpitest.c

使用sbatch提交脚本如下(mpitest.sbatch):
#!/bin/bash
#SBATCH -n 10
#SBATCH -p hpib
srun -n $SLURM_NTASKS mpitest
提交:

$ sbatch mpitest.sbatch

从生成的.out文件可以看到程序运行结果如下:

Hello world: rank 0 of 10 running on n0088
Hello world: rank 1 of 10 running on n0088
Hello world: rank 2 of 10 running on n0088
Hello world: rank 3 of 10 running on n0088
Hello world: rank 4 of 10 running on n0088
Hello world: rank 5 of 10 running on n0088
Hello world: rank 6 of 10 running on n0088
Hello world: rank 7 of 10 running on n0089
Hello world: rank 8 of 10 running on n0089
Hello world: rank 9 of 10 running on n0089

 

OpenMPI

使用时添加响应的环境变量:

$ module load openmpi/2.1.5

编译以及调用:
$ mpicc -o mpitest mpitest.c
使用sbatch提交脚本如下(mpitest.sbatch):
#!/bin/bash
#SBATCH -n 10
#SBATCH -p hpib
srun -n $SLURM_NTASKS mpitest
提交

$ sbatch mpitest.sbatch

从生成的.out文件可以看到程序运行结果如下:

Hello world: rank 0 of 10 running on n0129
Hello world: rank 1 of 10 running on n0129
Hello world: rank 2 of 10 running on n0129
Hello world: rank 3 of 10 running on n0129
Hello world: rank 4 of 10 running on n0129
Hello world: rank 5 of 10 running on n0129
Hello world: rank 6 of 10 running on n0129
Hello world: rank 7 of 10 running on n0129
Hello world: rank 8 of 10 running on n0129
Hello world: rank 9 of 10 running on n0129