简体   繁体   中英

MPI_send and MPI_recv functions for multiple processors C++

I`m pretty new in MPI programming and got stuck in the middle of my project.

I want to write an MPI code for the following problem. I am not sure which functions from MPI is appropriate. Here is the problem:

Processor 0 has a 2D vector or array of Edges={(0,4),(1,5)}. It needs to get some information from the other processors, which is not always a fixed processor, it depends on set Edges. Therefore, I need a for loop as follows:

if(my_rank==0)
{
    for(all pairs (i,j) in Edges)
    {
        send i (or j) to Processor r (r depends on the index i)
        recieve L_r from Processor r
        create (L_i, L_j, min(L_i,L_j)) // want to broadcast to all later.
    }
}

Now, I am not sure how to do it for processor r, should I do in a for loop? Note that I can not do it in an if statement since I dont know which processor would be and so based on the number of processors I need an if statement which I don`t think is a right way. I might have so many processors which each holds some part of a matrix.

Need to point that I cannot communicate with a subgroup of communicators, since it all depends on the indices, basically, I want the labels for example indices (0,4) which need to communicate with P4 that holds it.

Any ideas are appreciated.

I would do it as follow:

1) Proc 0 construct a list of every processes it has to comunicate with.

2) Proc 0 broadcast this list to all processes (or only to the one he have to communicate with, but that will be more complicated, can be done once you got a version which works)

3) You perform your comm:

If(rank==0){...}

else if (rank in the list){...}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM