root/ompi/mca/osc/base/osc_base_obj_convert.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ompi_osc_base_datatype_create
  2. ompi_osc_base_op_create

   1 /*
   2  * Copyright (c) 2004-2005 The Trustees of Indiana University.
   3  *                         All rights reserved.
   4  * Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
   5  *                         All rights reserved.
   6  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   7  *                         University of Stuttgart.  All rights reserved.
   8  * Copyright (c) 2004-2005 The Regents of the University of California.
   9  *                         All rights reserved.
  10  * Copyright (c) 2015      Research Organization for Information Science
  11  *                         and Technology (RIST). All rights reserved.
  12  * $COPYRIGHT$
  13  *
  14  * Additional copyrights may follow
  15  *
  16  * $HEADER$
  17  */
  18 
  19 /**
  20  * @file
  21  *
  22  * Utility functions for Open MPI object manipulation by the One-sided code
  23  *
  24  * Utility functions for creating / finding handles for Open MPI
  25  * objects, usually based on indexes sent from remote peers.
  26  */
  27 
  28 #include "ompi_config.h"
  29 #include "ompi/datatype/ompi_datatype.h"
  30 #include "ompi/proc/proc.h"
  31 #include "ompi/op/op.h"
  32 
  33 BEGIN_C_DECLS
  34 
  35 /**
  36  * Create datatype based on packed payload
  37  *
  38  * Create a useable MPI datatype based on it's packed description.
  39  * The datatype is owned by the calling process and must be
  40  * OBJ_RELEASEd when no longer in use.
  41  *
  42  * @param remote_proc The ompi_proc_t pointer for the remote process
  43  * @param payload     A pointer to the pointer to the payload.  The
  44  *                    pointer to the payload will be moved past the
  45  *                    datatype information upon successful return.
  46  *
  47  * @retval NULL       A failure occrred
  48  * @retval non-NULL   A fully operational datatype
  49  */
  50 static inline
  51 struct ompi_datatype_t*
  52 ompi_osc_base_datatype_create(ompi_proc_t *remote_proc,  void **payload)
  53 {
  54     struct ompi_datatype_t *datatype =
  55         ompi_datatype_create_from_packed_description(payload, remote_proc);
  56     if (NULL == datatype) return NULL;
  57     OMPI_DATATYPE_RETAIN(datatype);
  58     return datatype;
  59 }
  60 
  61 
  62 /**
  63  * Create datatype based on Fortran Index
  64  *
  65  * Create a useable MPI datatype based on it's Fortran index, which is
  66  * globally the same for predefined operations.  The op handle is
  67  * owned by the calling process and must be OBJ_RELEASEd when no
  68  * longer in use.
  69  *
  70  * @param op_id       The fortran index for the operaton
  71  *
  72  * @retval NULL       A failure occrred
  73  * @retval non-NULL   An op handle
  74  */
  75 static inline
  76 ompi_op_t *
  77 ompi_osc_base_op_create(int op_id)
  78 {
  79     ompi_op_t *op = PMPI_Op_f2c(op_id);
  80     OBJ_RETAIN(op);
  81     return op;
  82 }
  83 
  84 
  85 /**
  86  * Get the primitive datatype information for a legal one-sided accumulate datatype
  87  *
  88  * Get the primitive datatype information for a legal one-sided
  89  * accumulate datatype.  This includes the primitive datatype used to
  90  * build the datatype (there can be only one) and the number of
  91  * instances of that primitive datatype in the datatype (there can be
  92  * many).
  93  *
  94  * @param datatype      legal one-sided datatype
  95  * @param prim_datatype The primitive datatype used to build datatype
  96  * @param prim_count    Number of instances of prim_datattpe in datatype
  97  *
  98  * @retval OMPI_SUCCESS Success
  99  */
 100 OMPI_DECLSPEC int ompi_osc_base_get_primitive_type_info(ompi_datatype_t *datatype,
 101                                                         ompi_datatype_t **prim_datatype,
 102                                                         uint32_t *prim_count);
 103 
 104 
 105 /**
 106  * Apply the operation specified from inbuf to outbut
 107  *
 108  * Apply the specified reduction operation from inbuf to outbuf.
 109  * inbuf must contain count instances of datatype, in the local
 110  * process's binary mode.
 111  *
 112  * @retval OMPI_SUCCESS           Success
 113  * @retval OMPI_ERR_NOT_SUPPORTED Called with op == ompi_mpi_op_replace
 114  */
 115 OMPI_DECLSPEC int ompi_osc_base_process_op(void *outbuf,
 116                                            void *inbuf,
 117                                            size_t inbuflen,
 118                                            struct ompi_datatype_t *datatype,
 119                                            int count,
 120                                            ompi_op_t *op);
 121 
 122 OMPI_DECLSPEC int ompi_osc_base_sndrcv_op(const void *origin,
 123                                           int32_t origin_count,
 124                                           struct ompi_datatype_t *origin_dt,
 125                                           void *target,
 126                                           int32_t target_count,
 127                                           struct ompi_datatype_t *target_dt,
 128                                           ompi_op_t *op);
 129 
 130 END_C_DECLS

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