MPI程序的总体结构
讲解: MPI程序可以分为四大部分,即MPI头文件的声明部分,MPI用到相关变量的声明部分,MPI程序的初始化和结束部分,MPI程序体即执行部分。
任何一个MPI程序都是由这四部分组成的,缺少任何一部分都不是完整的MPI程序。 MPI程序的头文件和相关变量的声明部分
include 'mpif.h' character * (MPI_MAX_PROCESSOR_NAME)
processor_name integer myid, numprocs, namelen, rc,ierr 在FORTRAN
77中的头文件说明 声明了用来记录处理器名字的变量processor_name, 声明了用来记录当前处理器编号的变量myid,处理器总数的变量numprocs,处理器名字长度的变量namelen,用来记录返回结果和错误代码的rc和ierr。
#include "mpi.h" int myid, numprocs;
int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME];
在C语言中对应的头文件和变量声明形式 注意对于实现相同的功能,用C或者FORTRAN都可以实现,但是具体的实现方式是不同的,必须注意这两种语言在语法上的区别。
MPI程序的初始化和结束 在FORTRAN中MPI的初始化和结束语句分别是 call
MPI_INIT( ierr ) call MPI_FINALIZE(rc) 它们分别是MPI程序的第一条和最后一条可执行程序。
在C中MPI的初始化和结束语句分别是 MPI_Init(&argc,&argv);
MPI_Finalize(); 注意 MPI程序的开始和结束语句分别是MPI_INIT 和MPI_FINALIZE,否则会产生不可预期的后果。 MPI程序的执行部分
call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call
MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) call MPI_GET_PROCESSOR_NAME(processor_name,
namelen, ierr) write(*,10) myid,numprocs,processor_name 10 FORMAT('Hello
World! Process ',I2,' of ',I1,' on ', 20A) 在本例中,MPI程序一共有四条可执行语句,其中前三条是得到相应的输出变量,最后一条是输出语句,它将前面得到的变量的结果输出。
其中前3条语句分别得到当前进程编号,总共的进行数以及当前进程所在的处理器的名字。最后一条是输出语句,将这些结果输出到屏幕上。
MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen); fprintf(stderr,"Hello
World! Process %d of %d on %s\n", myid, numprocs, processor_name);
这是相应的C程序中的语句 |