Ejemplo n.º 1
0
int MPI_Recv_Nospin( void* buff, const int count, MPI_Datatype datatype,
                     const int from, const int tag, MPI_Comm comm,
                     MPI_Status* status )
{
    MPI_Request req;
    PMPI_Irecv( buff, count, datatype, from, tag, comm, &req );

    timespec ts{ 0, nsec_start };
    int flag = 0;
    while ( !flag )
    {
        nanosleep( &ts, nullptr );
        ts.tv_nsec = std::min( size_t(ts.tv_nsec << 1), nsec_max );
        PMPI_Request_get_status( req, &flag, status );
    }

    return status->MPI_ERROR;
}
Ejemplo n.º 2
0
int MPI_Send_Nospin( void *buff, const int count, MPI_Datatype datatype,
                     const int dest, const int tag, MPI_Comm comm )
{
    MPI_Request req;
    PMPI_Isend( buff, count, datatype, dest, tag, comm, &req );

    MPI_Status status;
    timespec ts{ 0, nsec_start };
    int flag = 0;
    while ( !flag )
    {
        nanosleep( &ts, nullptr );
        ts.tv_nsec = std::min( size_t(ts.tv_nsec << 1), nsec_max );
        PMPI_Request_get_status( req, &flag, &status );
    }

    return status.MPI_ERROR;
}
Ejemplo n.º 3
0
void ompi_request_get_status_f(MPI_Fint *request, ompi_fortran_logical_t *flag,
                              MPI_Fint *status, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Status c_status;
    MPI_Request c_req = PMPI_Request_f2c( *request );
    OMPI_LOGICAL_NAME_DECL(flag);

    /* This seems silly, but someone will do it */

    if (OMPI_IS_FORTRAN_STATUS_IGNORE(status)) {
        *flag = OMPI_INT_2_LOGICAL(0);
        c_ierr = MPI_SUCCESS;
    } else {
        c_ierr = PMPI_Request_get_status(c_req,
                                        OMPI_LOGICAL_SINGLE_NAME_CONVERT(flag),
                                        &c_status);
        OMPI_SINGLE_INT_2_LOGICAL(flag);
        PMPI_Status_c2f( &c_status, status );
    }
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
Ejemplo n.º 4
0
int MPI_Request_get_status( MPI_Request request, int *flag, MPI_Status *status){
  return PMPI_Request_get_status( request, flag, status);
}