Providing Fairness


Up: Buffering issues Next: Providing Fairness (Fortran) Previous: Fairness in message-passing

One alternative is


#define large 128 
MPI_Request requests[large]; 
MPI_Status  statuses[large]; 
int         indices[large]; 
int         buf[large]; 
for (i=1; i<size; i++)  
    MPI_Irecv( buf+i, 1, MPI_INT, i, 
               MPI_ANY_TAG, MPI_COMM_WORLD, &requests[i-1] ); 
while(not done) { 
    MPI_Waitsome( size-1, requests, &ndone, indices, statuses ); 
    for (i=0; i<ndone; i++) { 
        j = indices[i]; 
        printf( "Msg from %d with tag %d\n",  
                statuses[i].MPI_SOURCE,  
                statuses[i].MPI_TAG ); 
        MPI_Irecv( buf+j, 1, MPI_INT, j, 
                   MPI_ANY_TAG, MPI_COMM_WORLD, &requests[j] ); 
        } 
    } 



Up: Buffering issues Next: Providing Fairness (Fortran) Previous: Fairness in message-passing