我在做基于VTK的分布式数据的并行显示的时候,由于每个节点可能其上的数据并不一定最后显示在这个节点对应的屏幕上面,所以我们需要在整个流水线的最后把画出来的图形再进行重新的分配,这个时候我就要用到MPI。
MPI是多点接口(Multi Point Interface)的简称。我谈谈我用它做了什么,我也没有用到什么复杂的功能,主要就是用它的数据传输的功能,主要用到以下几个函数:
MPI_Gatherv(Localinfo,ssize,MPI_DOUBLE,totalinfo,rcounts,displs,MPI_DOUBLE,root,MPI_COMM_WORLD);
这个函数是一个N->1的函数,主要用来某个节点要收集其他所有其他节点的信息,但是需要注意的是,得到的总数据中,它会包含自己本地的数据,由于我只在头结点用过这个函数,所以自己的数据会在数组的最前面,但是我不知道其他节点使用的情况下,本地数据是不是会按顺序放。
MPI_Bcast(info,size,MPI_DOUBLE,0,MPI_COMM_WORLD);
这个函数呢是用来1->N的,也就是某个节点要把一份数据发到所有的其他节点,供他们使用的时候用,我这里是头结点把其他节点的数据集合后,进行处理,然后发给其他节点使用。
MPI_Recv(&info,1,MPI_INT,send,tag,MPI_COMM_WORLD,&status);
MPI_Ssend(&info,1,MPI_INT,recv,tag,MPI_COMM_WORLD);
这两个函数是一对,1->1使用的,根据tag的值识别为一对,我这里使用的Ssend模式是同步通信模式,