父进程和子进程形成的组间通信域上的通信 MPI-2的动态进程的创建是指从已经存在的一个组间通信域进程组的进程,派生出若干个进程形成一个新的进程组,原来的进程组相对于新派生的进程组称为父进程组,而新派生的进程组相对于原来的进程组称为子进程组。父子进程组属于不同的通信域,它们之间的通信是通过父子进程组的通信域形成的组间通信域来进行的。 MPI_COMM_SPAWN(command,argv,maxprocs,info, root,comm,intercomm,array_of_errcodes) INcommand将派生进程对应的可执行程序名 INargv 传递给command的参数 INmaxprocs 请求MPI派生的进程的最大个数 INinfo 传递给运行时的信息 INroot 负责检查上述参数的进程标识号 INcomm 派生新进程的组内通信域 OUT intercomm返回的组间通信域,包括原来的进程和新创建的进程 OUTarray_of_errcodes 返回的错误代码数组 Int MPI_Comm_spawn(char * command, char ** argv, int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm * intercomm, int * array_of_errcodes) MPI_COMM_SPAWN(COMMAND, ARGV, MAXPROCS, INFO, ROOT, COMM, INTERCOMM, ARRAY_OF_ERRCODES, IERROR) INTEGER INFO, MAXPROCS, ROOT, COMM, INTERCOMM ARRAY_OF_ERRCODES(*), IERROR MPI派生新的进程是通过调用MPI_COMM_SPAWN实现的。在MPI_COMM_SPAWN中需要指出将派生的进程对应的可执行程序的名字command,传递给可执行程序的参数argv,将要派生的进程的最大个数maxprocs,以及可能的运行时信息info。对于上述这些参数,不需要MPI每个进程都进行解释,只需提供一个解释进程的标识号ROOT即可,由ROOT进程完成对上述参数的解释并传递给其它的进程。此外,还需要指出需要和将派生出来的子进程进行通信的进程形成的组内通信域,即父进程组形成的通信域,此调用返回一个即包括原来的父进程组(组内通信域域comm),又包括新创建的子进程组(组内通信域)的组间通信域intercomm,子进程组的组间通信域没有显式出现。此调用还给出了调用的返回代码信息array_of_errcodes。 MPI_COMM_GET_PARENT(parent) 父进程组可以通过调用派生进程调用返回的组间通信域和子进程进行通信,子进程是如何得到包括父进程在内的组间通信域的信息呢?它是通过调用MPI_COMM_GET_PARENT得到的。 MPI_COMM_SPAWN_MULTIPLE(count,
array_of_commands, array_of_argv, MPI_COMM_SPAWN的另一种更为通用的形式是MPI_COMM_SPAWN_MULTIPLE,可以把MPI_COMM_SPAWN看作是MPI_COMM_SPAWN_MULTIPLE的一个特例。 | ||