快速mpi右旋大数据

时间:2015-06-01 16:03:29

标签: mpi openmpi boost-mpi

我想使用MPI以循环方式将数据移动到右侧。也就是说,如果您有4个节点,则1> 2,2-> 3,3-> 4,4-> 1。我正在使用boost mpi并使用以下代码来执行此操作。

mat new_W(this->W.n_rows,this->W.n_cols);
int p_send = MPI_RANK + 1 >= MPI_SIZE ? 0 : MPI_RANK + 1;
int p_recv = MPI_RANK - 1 < 0 ? MPI_SIZE - 1 : MPI_RANK - 1;
vector<boost::mpi::request> reqs;
reqs.push_back(this->world.isend(p_send, MAT_TAG, this->W));
reqs.push_back(this->world.irecv(p_recv, MAT_TAG, new_W));    
boost::mpi::wait_all(ALL(reqs));

在上面的代码中,我有以下观察结果。

  1. 发送更大的数据大小时,所有节点上的MPI_ALL_GATHER比右旋转更快。也就是说,每个人与每个人交换数据的速度都快于向邻居发送数据的速度。我的MPI_ALL_GATHER例程如下。

    vector<mat> all_x;  
    boost::mpi::all_gather (this->world,X,all_x);
    
  2. 如何使更高的数据包更快地旋转。

0 个答案:

没有答案