Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] Selecting different processors during function
From: Alexandre Barrozo (barrozo.ah_at_[hidden])
Date: 2011-02-19 11:37:09


Hi everybody,

I'm trying to write a routine that, if a certain condition is met, it
transfers a specific string from processor A to processor B. However, during
this transfer, I have to access the processor B within the same function
(the function was accessed on A, but I need to go to B to put the
transferred string on it's right place). The problem is that I have no idea
how to change between processors while using one of them. Here's a sample of
the code:

for ( int j = 0; j < atom->nlocal; j++ )
    {
        if ( rank != atom->tag[j] ) //condition for transfer
        {
            dest = atom->tag[j]; //the one who needs to deliver to
receive

            atom->tag[j] = rank;

            MPI_Isend( noisez[j], noisesize, MPI_DOUBLE, rank, 0, world,
&request);
        }
    }

/* I know this doesn't work, but it's just to get the idea of what I'm
trying to do */

    if( rank == dest ) //trying to access the destination processor
        {
             for ( int n = 0; n < atom->nlocal; n++ )
            {
              if( n =! atomtag[n] )
              {

                MPI_Irecv( noisez[n], noisesize, MPI_DOUBLE, flag2, 0,
world, &request);
                MPI_Wait(&request,&stat);
                for ( int m = n; m < atom->nlocal; m++ )
                    atomtag[m] = m;
                break;
              }
              else if ( n == atom->nlocal -1)
              {

                MPI_Irecv( noisez[atom->nlocal], noisesize, MPI_DOUBLE,
flag2, 0, world, &request);
                MPI_Wait(&request,&stat);
             }
            }
        }

Is there any function to call another processor while using one of them?

Regards,

Alexandre