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