赞
踩
MPI除了有一个默认的通信域MPI_COMM_WORLD包含所有结点之外,还可以将其分解为多个子通信域进行组内通讯。主要使用MPI_Comm_split(myComm,color,key,splitComm)这个API实现。其主要说明如下:
参数myComm是待分裂的通信域,而splitComm是分裂后的通信域。color是子域的标志,而key是结点在组内的标志。
比如如果有9个结点其rank分别为0-8;
那么用一下规则分组:
color = rank % 3
key = rank / 3
那么结点5(rank=5)就在子通信域的第3个组内(组id为2,从0开始算),在组内的标志为1。
这时如果再次调用广播MPI_Bcast函数,如果其第5个参数是SplitComm通信域的话,每个组都会由指定的root进行一次广播通讯。而这个root不在是总通讯域的id,而是在自己组内的id。如果每个组都有id为root的结点,那么每个组都要在组内进行一次广播。
下面有一段代码可以说明:
- /********************************
- *author : ysc
- *email : 3100105066@zju.edu.cn
- **************************&****/
-
- #include <mpi.h>
- #include <stdio.h>
-
- void main(int argc,char *argv[])
- {
- MPI_Comm MyWorld, SplitWorld;
- int my_rank,group_size, Color, Key;
- ch
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。