root/ompi/mca/coll/base/coll_base_util.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ompi_coll_base_sendrecv

   1 /*
   2  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2015 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2014-2017 Research Organization for Information Science
  13  *                         and Technology (RIST). All rights reserved.
  14  * $COPYRIGHT$
  15  *
  16  * Additional copyrights may follow
  17  *
  18  * $HEADER$
  19  */
  20 
  21 #ifndef MCA_COLL_BASE_UTIL_EXPORT_H
  22 #define MCA_COLL_BASE_UTIL_EXPORT_H
  23 
  24 #include "ompi_config.h"
  25 
  26 #include "mpi.h"
  27 #include "ompi/mca/mca.h"
  28 #include "ompi/datatype/ompi_datatype.h"
  29 #include "ompi/request/request.h"
  30 #include "ompi/mca/pml/pml.h"
  31 
  32 BEGIN_C_DECLS
  33 
  34 /**
  35  * A MPI_like function doing a send and a receive simultaneously.
  36  * If one of the communications results in a zero-byte message the
  37  * communication is ignored, and no message will cross to the peer.
  38  */
  39 int ompi_coll_base_sendrecv_actual( const void* sendbuf, size_t scount,
  40                                     ompi_datatype_t* sdatatype,
  41                                     int dest, int stag,
  42                                     void* recvbuf, size_t rcount,
  43                                     ompi_datatype_t* rdatatype,
  44                                     int source, int rtag,
  45                                     struct ompi_communicator_t* comm,
  46                                     ompi_status_public_t* status );
  47 
  48 
  49 /**
  50  * Similar to the function above this implementation of send-receive
  51  * do not generate communications for zero-bytes messages. Thus, it is
  52  * improper to use in the context of some algorithms for collective
  53  * communications.
  54  */
  55 static inline int
  56 ompi_coll_base_sendrecv( void* sendbuf, size_t scount, ompi_datatype_t* sdatatype,
  57                           int dest, int stag,
  58                           void* recvbuf, size_t rcount, ompi_datatype_t* rdatatype,
  59                           int source, int rtag,
  60                           struct ompi_communicator_t* comm,
  61                           ompi_status_public_t* status, int myid )
  62 {
  63     if ((dest == source) && (source == myid)) {
  64         return (int) ompi_datatype_sndrcv(sendbuf, (int32_t) scount, sdatatype,
  65                                           recvbuf, (int32_t) rcount, rdatatype);
  66     }
  67     return ompi_coll_base_sendrecv_actual (sendbuf, scount, sdatatype,
  68                                            dest, stag,
  69                                            recvbuf, rcount, rdatatype,
  70                                            source, rtag, comm, status);
  71 }
  72 
  73 /**
  74  * ompi_mirror_perm: Returns mirror permutation of nbits low-order bits
  75  *                   of x [*].
  76  * [*] Warren Jr., Henry S. Hacker's Delight (2ed). 2013.
  77  *     Chapter 7. Rearranging Bits and Bytes.
  78  */
  79 unsigned int ompi_mirror_perm(unsigned int x, int nbits);
  80 
  81 /*
  82  * ompi_rounddown: Rounds a number down to nearest multiple.
  83  *     rounddown(10,4) = 8, rounddown(6,3) = 6, rounddown(14,3) = 12
  84  */
  85 int ompi_rounddown(int num, int factor);
  86 
  87 END_C_DECLS
  88 #endif /* MCA_COLL_BASE_UTIL_EXPORT_H */

/* [<][>][^][v][top][bottom][index][help] */