root/oshmem/shmem/c/shmem_p.c

/* [<][>][^][v][top][bottom][index][help] */
   1 /*
   2  * Copyright (c) 2013      Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * $COPYRIGHT$
   5  *
   6  * Additional copyrights may follow
   7  *
   8  * $HEADER$
   9  */
  10 #include "oshmem_config.h"
  11 
  12 #include "oshmem/constants.h"
  13 #include "oshmem/include/shmem.h"
  14 #include "oshmem/include/shmemx.h"
  15 
  16 #include "oshmem/runtime/runtime.h"
  17 
  18 #include "oshmem/mca/spml/spml.h"
  19 
  20 /*
  21  * These routines provide a low latency mechanism to write basic types (short,
  22  * int, float, double, long) to symmetric data objects on remote PEs.
  23  * The shmem_TYPE_p() routines write value to a symmetric array element or scalar
  24  * data object of the remote PE indicated by the parameter pe. These routines start the remote
  25  * transfer and may return before the data is delivered to the remote PE.
  26  */
  27 
  28 #define DO_SHMEM_TYPE_P(ctx, type, addr, value, pe) do {            \
  29         int rc = OSHMEM_SUCCESS;                                    \
  30         size_t size = 0;                                            \
  31                                                                     \
  32         RUNTIME_CHECK_INIT();                                       \
  33         RUNTIME_CHECK_PE(pe);                                       \
  34         RUNTIME_CHECK_ADDR(addr);                                   \
  35                                                                     \
  36         size = sizeof(type);                                        \
  37         rc = MCA_SPML_CALL(put(                                     \
  38             ctx,                                                    \
  39             (void*)addr,                                            \
  40             size,                                                   \
  41             (void*)&value,                                          \
  42             pe));                                                   \
  43         RUNTIME_CHECK_RC(rc);                                       \
  44     } while(0)
  45 
  46 #define SHMEM_CTX_TYPE_P(type_name, type, prefix)                   \
  47     void prefix##_ctx##type_name##_p(shmem_ctx_t ctx, type *addr, type value, int pe) \
  48     {                                                               \
  49         DO_SHMEM_TYPE_P(ctx, type, addr, value, pe);                \
  50         return ;                                                    \
  51     }
  52 
  53 #define SHMEM_TYPE_P(type_name, type, prefix)                       \
  54     void prefix##type_name##_p(type *addr, type value, int pe)      \
  55     {                                                               \
  56         DO_SHMEM_TYPE_P(oshmem_ctx_default, type, addr, value, pe);  \
  57         return ;                                                    \
  58     }
  59 
  60 #if OSHMEM_PROFILING
  61 #include "oshmem/include/pshmem.h"
  62 #pragma weak shmem_ctx_char_p       = pshmem_ctx_char_p
  63 #pragma weak shmem_ctx_short_p      = pshmem_ctx_short_p
  64 #pragma weak shmem_ctx_int_p        = pshmem_ctx_int_p
  65 #pragma weak shmem_ctx_long_p       = pshmem_ctx_long_p
  66 #pragma weak shmem_ctx_float_p      = pshmem_ctx_float_p
  67 #pragma weak shmem_ctx_double_p     = pshmem_ctx_double_p
  68 #pragma weak shmem_ctx_longlong_p   = pshmem_ctx_longlong_p
  69 #pragma weak shmem_ctx_schar_p      = pshmem_ctx_schar_p
  70 #pragma weak shmem_ctx_uchar_p      = pshmem_ctx_uchar_p
  71 #pragma weak shmem_ctx_ushort_p     = pshmem_ctx_ushort_p
  72 #pragma weak shmem_ctx_uint_p       = pshmem_ctx_uint_p
  73 #pragma weak shmem_ctx_ulong_p      = pshmem_ctx_ulong_p
  74 #pragma weak shmem_ctx_ulonglong_p  = pshmem_ctx_ulonglong_p
  75 #pragma weak shmem_ctx_longdouble_p = pshmem_ctx_longdouble_p
  76 #pragma weak shmem_ctx_int8_p       = pshmem_ctx_int8_p
  77 #pragma weak shmem_ctx_int16_p      = pshmem_ctx_int16_p
  78 #pragma weak shmem_ctx_int32_p      = pshmem_ctx_int32_p
  79 #pragma weak shmem_ctx_int64_p      = pshmem_ctx_int64_p
  80 #pragma weak shmem_ctx_uint8_p      = pshmem_ctx_uint8_p
  81 #pragma weak shmem_ctx_uint16_p     = pshmem_ctx_uint16_p
  82 #pragma weak shmem_ctx_uint32_p     = pshmem_ctx_uint32_p
  83 #pragma weak shmem_ctx_uint64_p     = pshmem_ctx_uint64_p
  84 #pragma weak shmem_ctx_size_p       = pshmem_ctx_size_p
  85 #pragma weak shmem_ctx_ptrdiff_p    = pshmem_ctx_ptrdiff_p
  86 
  87 #pragma weak shmem_char_p           = pshmem_char_p
  88 #pragma weak shmem_short_p          = pshmem_short_p
  89 #pragma weak shmem_int_p            = pshmem_int_p
  90 #pragma weak shmem_long_p           = pshmem_long_p
  91 #pragma weak shmem_float_p          = pshmem_float_p
  92 #pragma weak shmem_double_p         = pshmem_double_p
  93 #pragma weak shmem_longlong_p       = pshmem_longlong_p
  94 #pragma weak shmem_schar_p          = pshmem_schar_p
  95 #pragma weak shmem_uchar_p          = pshmem_uchar_p
  96 #pragma weak shmem_ushort_p         = pshmem_ushort_p
  97 #pragma weak shmem_uint_p           = pshmem_uint_p
  98 #pragma weak shmem_ulong_p          = pshmem_ulong_p
  99 #pragma weak shmem_ulonglong_p      = pshmem_ulonglong_p
 100 #pragma weak shmem_longdouble_p     = pshmem_longdouble_p
 101 #pragma weak shmem_int8_p           = pshmem_int8_p
 102 #pragma weak shmem_int16_p          = pshmem_int16_p
 103 #pragma weak shmem_int32_p          = pshmem_int32_p
 104 #pragma weak shmem_int64_p          = pshmem_int64_p
 105 #pragma weak shmem_uint8_p          = pshmem_uint8_p
 106 #pragma weak shmem_uint16_p         = pshmem_uint16_p
 107 #pragma weak shmem_uint32_p         = pshmem_uint32_p
 108 #pragma weak shmem_uint64_p         = pshmem_uint64_p
 109 #pragma weak shmem_size_p           = pshmem_size_p
 110 #pragma weak shmem_ptrdiff_p        = pshmem_ptrdiff_p
 111 
 112 #pragma weak shmemx_int16_p = pshmemx_int16_p
 113 #pragma weak shmemx_int32_p = pshmemx_int32_p
 114 #pragma weak shmemx_int64_p = pshmemx_int64_p
 115 #include "oshmem/shmem/c/profile/defines.h"
 116 #endif
 117 
 118 SHMEM_CTX_TYPE_P(_char, char, shmem)
 119 SHMEM_CTX_TYPE_P(_short, short, shmem)
 120 SHMEM_CTX_TYPE_P(_int, int, shmem)
 121 SHMEM_CTX_TYPE_P(_long, long, shmem)
 122 SHMEM_CTX_TYPE_P(_longlong, long long, shmem)
 123 SHMEM_CTX_TYPE_P(_schar, signed char, shmem)
 124 SHMEM_CTX_TYPE_P(_uchar, unsigned char, shmem)
 125 SHMEM_CTX_TYPE_P(_ushort, unsigned short, shmem)
 126 SHMEM_CTX_TYPE_P(_uint, unsigned int, shmem)
 127 SHMEM_CTX_TYPE_P(_ulong, unsigned long, shmem)
 128 SHMEM_CTX_TYPE_P(_ulonglong, unsigned long long, shmem)
 129 SHMEM_CTX_TYPE_P(_float, float, shmem)
 130 SHMEM_CTX_TYPE_P(_double, double, shmem)
 131 SHMEM_CTX_TYPE_P(_longdouble, long double, shmem)
 132 SHMEM_CTX_TYPE_P(_int8, int8_t, shmem)
 133 SHMEM_CTX_TYPE_P(_int16, int16_t, shmem)
 134 SHMEM_CTX_TYPE_P(_int32, int32_t, shmem)
 135 SHMEM_CTX_TYPE_P(_int64, int64_t, shmem)
 136 SHMEM_CTX_TYPE_P(_uint8, uint8_t, shmem)
 137 SHMEM_CTX_TYPE_P(_uint16, uint16_t, shmem)
 138 SHMEM_CTX_TYPE_P(_uint32, uint32_t, shmem)
 139 SHMEM_CTX_TYPE_P(_uint64, uint64_t, shmem)
 140 SHMEM_CTX_TYPE_P(_size, size_t, shmem)
 141 SHMEM_CTX_TYPE_P(_ptrdiff, ptrdiff_t, shmem)
 142 
 143 SHMEM_TYPE_P(_char, char, shmem)
 144 SHMEM_TYPE_P(_short, short, shmem)
 145 SHMEM_TYPE_P(_int, int, shmem)
 146 SHMEM_TYPE_P(_long, long, shmem)
 147 SHMEM_TYPE_P(_longlong, long long, shmem)
 148 SHMEM_TYPE_P(_schar, signed char, shmem)
 149 SHMEM_TYPE_P(_uchar, unsigned char, shmem)
 150 SHMEM_TYPE_P(_ushort, unsigned short, shmem)
 151 SHMEM_TYPE_P(_uint, unsigned int, shmem)
 152 SHMEM_TYPE_P(_ulong, unsigned long, shmem)
 153 SHMEM_TYPE_P(_ulonglong, unsigned long long, shmem)
 154 SHMEM_TYPE_P(_float, float, shmem)
 155 SHMEM_TYPE_P(_double, double, shmem)
 156 SHMEM_TYPE_P(_longdouble, long double, shmem)
 157 SHMEM_TYPE_P(_int8, int8_t, shmem)
 158 SHMEM_TYPE_P(_int16, int16_t, shmem)
 159 SHMEM_TYPE_P(_int32, int32_t, shmem)
 160 SHMEM_TYPE_P(_int64, int64_t, shmem)
 161 SHMEM_TYPE_P(_uint8, uint8_t, shmem)
 162 SHMEM_TYPE_P(_uint16, uint16_t, shmem)
 163 SHMEM_TYPE_P(_uint32, uint32_t, shmem)
 164 SHMEM_TYPE_P(_uint64, uint64_t, shmem)
 165 SHMEM_TYPE_P(_size, size_t, shmem)
 166 SHMEM_TYPE_P(_ptrdiff, ptrdiff_t, shmem)
 167 
 168 SHMEM_TYPE_P(_int16, int16_t, shmemx)
 169 SHMEM_TYPE_P(_int32, int32_t, shmemx)
 170 SHMEM_TYPE_P(_int64, int64_t, shmemx)

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