root/oshmem/shmem/c/shmem_iget.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 
  15 #include "oshmem/runtime/runtime.h"
  16 
  17 #include "oshmem/mca/spml/spml.h"
  18 
  19 /*
  20  * The strided get routines copy strided data located on a remote PE to a local strided data object.
  21  * The strided get routines retrieve array data available at address source on remote PE (pe).
  22  * The elements of the source array are separated by a stride sst. Once the data is received,
  23  * it is stored at the local memory address target, separated by stride tst. The routines return
  24  * when the data has been copied into the local target array.
  25  */
  26 #define DO_SHMEM_TYPE_IGET(ctx, type, target, source, tst, sst, nelems, pe) do { \
  27         int rc = OSHMEM_SUCCESS;                                    \
  28         size_t element_size = 0;                                    \
  29         size_t i = 0;                                               \
  30                                                                     \
  31         RUNTIME_CHECK_INIT();                                       \
  32         RUNTIME_CHECK_PE(pe);                                       \
  33         RUNTIME_CHECK_ADDR(source);                                 \
  34                                                                     \
  35         element_size = sizeof(type);                                \
  36         for (i = 0; i < nelems; i++)                                \
  37         {                                                           \
  38             rc = MCA_SPML_CALL(get(                                 \
  39                 ctx,                                                \
  40                 (void*)(source + i * sst),                          \
  41                 element_size,                                       \
  42                 (void*)(target + i * tst),                          \
  43                 pe));                                               \
  44         }                                                           \
  45         RUNTIME_CHECK_RC(rc);                                       \
  46     } while (0)
  47 
  48 #define SHMEM_CTX_TYPE_IGET(type_name, type)                        \
  49     void shmem_ctx##type_name##_iget(shmem_ctx_t ctx, type *target, const type *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
  50     {                                                               \
  51         DO_SHMEM_TYPE_IGET(ctx, type, target, source, tst, sst, nelems, pe); \
  52         return ;                                                    \
  53     }
  54 
  55 #define SHMEM_TYPE_IGET(type_name, type)                            \
  56     void shmem##type_name##_iget(type *target, const type *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
  57     {                                                               \
  58         DO_SHMEM_TYPE_IGET(oshmem_ctx_default, type, target, source, \
  59                            tst, sst, nelems, pe);                   \
  60         return ;                                                    \
  61     }
  62 
  63 #if OSHMEM_PROFILING
  64 #include "oshmem/include/pshmem.h"
  65 #pragma weak shmem_ctx_char_iget       = pshmem_ctx_char_iget
  66 #pragma weak shmem_ctx_short_iget      = pshmem_ctx_short_iget
  67 #pragma weak shmem_ctx_int_iget        = pshmem_ctx_int_iget
  68 #pragma weak shmem_ctx_long_iget       = pshmem_ctx_long_iget
  69 #pragma weak shmem_ctx_float_iget      = pshmem_ctx_float_iget
  70 #pragma weak shmem_ctx_double_iget     = pshmem_ctx_double_iget
  71 #pragma weak shmem_ctx_longlong_iget   = pshmem_ctx_longlong_iget
  72 #pragma weak shmem_ctx_schar_iget      = pshmem_ctx_schar_iget
  73 #pragma weak shmem_ctx_uchar_iget      = pshmem_ctx_uchar_iget
  74 #pragma weak shmem_ctx_ushort_iget     = pshmem_ctx_ushort_iget
  75 #pragma weak shmem_ctx_uint_iget       = pshmem_ctx_uint_iget
  76 #pragma weak shmem_ctx_ulong_iget      = pshmem_ctx_ulong_iget
  77 #pragma weak shmem_ctx_ulonglong_iget  = pshmem_ctx_ulonglong_iget
  78 #pragma weak shmem_ctx_longdouble_iget = pshmem_ctx_longdouble_iget
  79 #pragma weak shmem_ctx_int8_iget       = pshmem_ctx_int8_iget
  80 #pragma weak shmem_ctx_int16_iget      = pshmem_ctx_int16_iget
  81 #pragma weak shmem_ctx_int32_iget      = pshmem_ctx_int32_iget
  82 #pragma weak shmem_ctx_int64_iget      = pshmem_ctx_int64_iget
  83 #pragma weak shmem_ctx_uint8_iget      = pshmem_ctx_uint8_iget
  84 #pragma weak shmem_ctx_uint16_iget     = pshmem_ctx_uint16_iget
  85 #pragma weak shmem_ctx_uint32_iget     = pshmem_ctx_uint32_iget
  86 #pragma weak shmem_ctx_uint64_iget     = pshmem_ctx_uint64_iget
  87 #pragma weak shmem_ctx_size_iget       = pshmem_ctx_size_iget
  88 #pragma weak shmem_ctx_ptrdiff_iget    = pshmem_ctx_ptrdiff_iget
  89 
  90 #pragma weak shmem_char_iget           = pshmem_char_iget
  91 #pragma weak shmem_short_iget          = pshmem_short_iget
  92 #pragma weak shmem_int_iget            = pshmem_int_iget
  93 #pragma weak shmem_long_iget           = pshmem_long_iget
  94 #pragma weak shmem_float_iget          = pshmem_float_iget
  95 #pragma weak shmem_double_iget         = pshmem_double_iget
  96 #pragma weak shmem_longlong_iget       = pshmem_longlong_iget
  97 #pragma weak shmem_schar_iget          = pshmem_schar_iget
  98 #pragma weak shmem_uchar_iget          = pshmem_uchar_iget
  99 #pragma weak shmem_ushort_iget         = pshmem_ushort_iget
 100 #pragma weak shmem_uint_iget           = pshmem_uint_iget
 101 #pragma weak shmem_ulong_iget          = pshmem_ulong_iget
 102 #pragma weak shmem_ulonglong_iget      = pshmem_ulonglong_iget
 103 #pragma weak shmem_longdouble_iget     = pshmem_longdouble_iget
 104 #pragma weak shmem_int8_iget           = pshmem_int8_iget
 105 #pragma weak shmem_int16_iget          = pshmem_int16_iget
 106 #pragma weak shmem_int32_iget          = pshmem_int32_iget
 107 #pragma weak shmem_int64_iget          = pshmem_int64_iget
 108 #pragma weak shmem_uint8_iget          = pshmem_uint8_iget
 109 #pragma weak shmem_uint16_iget         = pshmem_uint16_iget
 110 #pragma weak shmem_uint32_iget         = pshmem_uint32_iget
 111 #pragma weak shmem_uint64_iget         = pshmem_uint64_iget
 112 #pragma weak shmem_size_iget           = pshmem_size_iget
 113 #pragma weak shmem_ptrdiff_iget        = pshmem_ptrdiff_iget
 114 
 115 #pragma weak shmem_ctx_iget8 = pshmem_ctx_iget8
 116 #pragma weak shmem_ctx_iget16 = pshmem_ctx_iget16
 117 #pragma weak shmem_ctx_iget32 = pshmem_ctx_iget32
 118 #pragma weak shmem_ctx_iget64 = pshmem_ctx_iget64
 119 #pragma weak shmem_ctx_iget128 = pshmem_ctx_iget128
 120 
 121 #pragma weak shmem_iget8 = pshmem_iget8
 122 #pragma weak shmem_iget16 = pshmem_iget16
 123 #pragma weak shmem_iget32 = pshmem_iget32
 124 #pragma weak shmem_iget64 = pshmem_iget64
 125 #pragma weak shmem_iget128 = pshmem_iget128
 126 #include "oshmem/shmem/c/profile/defines.h"
 127 #endif
 128 
 129 SHMEM_CTX_TYPE_IGET(_char, char)
 130 SHMEM_CTX_TYPE_IGET(_short, short)
 131 SHMEM_CTX_TYPE_IGET(_int, int)
 132 SHMEM_CTX_TYPE_IGET(_long, long)
 133 SHMEM_CTX_TYPE_IGET(_longlong, long long)
 134 SHMEM_CTX_TYPE_IGET(_schar, signed char)
 135 SHMEM_CTX_TYPE_IGET(_uchar, unsigned char)
 136 SHMEM_CTX_TYPE_IGET(_ushort, unsigned short)
 137 SHMEM_CTX_TYPE_IGET(_uint, unsigned int)
 138 SHMEM_CTX_TYPE_IGET(_ulong, unsigned long)
 139 SHMEM_CTX_TYPE_IGET(_ulonglong, unsigned long long)
 140 SHMEM_CTX_TYPE_IGET(_float, float)
 141 SHMEM_CTX_TYPE_IGET(_double, double)
 142 SHMEM_CTX_TYPE_IGET(_longdouble, long double)
 143 SHMEM_CTX_TYPE_IGET(_int8, int8_t)
 144 SHMEM_CTX_TYPE_IGET(_int16, int16_t)
 145 SHMEM_CTX_TYPE_IGET(_int32, int32_t)
 146 SHMEM_CTX_TYPE_IGET(_int64, int64_t)
 147 SHMEM_CTX_TYPE_IGET(_uint8, uint8_t)
 148 SHMEM_CTX_TYPE_IGET(_uint16, uint16_t)
 149 SHMEM_CTX_TYPE_IGET(_uint32, uint32_t)
 150 SHMEM_CTX_TYPE_IGET(_uint64, uint64_t)
 151 SHMEM_CTX_TYPE_IGET(_size, size_t)
 152 SHMEM_CTX_TYPE_IGET(_ptrdiff, ptrdiff_t)
 153 
 154 SHMEM_TYPE_IGET(_char, char)
 155 SHMEM_TYPE_IGET(_short, short)
 156 SHMEM_TYPE_IGET(_int, int)
 157 SHMEM_TYPE_IGET(_long, long)
 158 SHMEM_TYPE_IGET(_longlong, long long)
 159 SHMEM_TYPE_IGET(_schar, signed char)
 160 SHMEM_TYPE_IGET(_uchar, unsigned char)
 161 SHMEM_TYPE_IGET(_ushort, unsigned short)
 162 SHMEM_TYPE_IGET(_uint, unsigned int)
 163 SHMEM_TYPE_IGET(_ulong, unsigned long)
 164 SHMEM_TYPE_IGET(_ulonglong, unsigned long long)
 165 SHMEM_TYPE_IGET(_float, float)
 166 SHMEM_TYPE_IGET(_double, double)
 167 SHMEM_TYPE_IGET(_longdouble, long double)
 168 SHMEM_TYPE_IGET(_int8, int8_t)
 169 SHMEM_TYPE_IGET(_int16, int16_t)
 170 SHMEM_TYPE_IGET(_int32, int32_t)
 171 SHMEM_TYPE_IGET(_int64, int64_t)
 172 SHMEM_TYPE_IGET(_uint8, uint8_t)
 173 SHMEM_TYPE_IGET(_uint16, uint16_t)
 174 SHMEM_TYPE_IGET(_uint32, uint32_t)
 175 SHMEM_TYPE_IGET(_uint64, uint64_t)
 176 SHMEM_TYPE_IGET(_size, size_t)
 177 SHMEM_TYPE_IGET(_ptrdiff, ptrdiff_t)
 178 
 179 #define DO_SHMEM_IGETMEM(ctx, target, source, tst, sst, element_size, nelems, pe) do { \
 180         int rc = OSHMEM_SUCCESS;                                    \
 181         size_t i = 0;                                               \
 182                                                                     \
 183         RUNTIME_CHECK_INIT();                                       \
 184         RUNTIME_CHECK_PE(pe);                                       \
 185         RUNTIME_CHECK_ADDR(source);                                 \
 186                                                                     \
 187         for (i = 0; i < nelems; i++)                                \
 188         {                                                           \
 189             rc = MCA_SPML_CALL(get(                                 \
 190                 ctx,                                                \
 191                 (void*)((char*)source + i * sst * element_size),    \
 192                 element_size,                                       \
 193                 (void*)((char*)target + i * tst * element_size),    \
 194                 pe));                                               \
 195         }                                                           \
 196         RUNTIME_CHECK_RC(rc);                                       \
 197     } while (0)
 198 
 199 #define SHMEM_CTX_TYPE_IGETMEM(name, element_size, prefix)          \
 200     void prefix##_ctx##name(shmem_ctx_t ctx, void *target, const void *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
 201     {                                                               \
 202         DO_SHMEM_IGETMEM(ctx, target, source, tst, sst,             \
 203                          element_size, nelems, pe);                 \
 204         return ;                                                    \
 205     }
 206 
 207 #define SHMEM_TYPE_IGETMEM(name, element_size, prefix)              \
 208     void prefix##name(void *target, const void *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
 209     {                                                               \
 210         DO_SHMEM_IGETMEM(oshmem_ctx_default, target, source, tst, sst, \
 211                          element_size, nelems, pe);                 \
 212         return ;                                                    \
 213     }
 214 
 215 SHMEM_CTX_TYPE_IGETMEM(_iget8, 1, shmem)
 216 SHMEM_CTX_TYPE_IGETMEM(_iget16, 2, shmem)
 217 SHMEM_CTX_TYPE_IGETMEM(_iget32, 4, shmem)
 218 SHMEM_CTX_TYPE_IGETMEM(_iget64, 8, shmem)
 219 SHMEM_CTX_TYPE_IGETMEM(_iget128, 16, shmem)
 220 SHMEM_TYPE_IGETMEM(_iget8, 1, shmem)
 221 SHMEM_TYPE_IGETMEM(_iget16, 2, shmem)
 222 SHMEM_TYPE_IGETMEM(_iget32, 4, shmem)
 223 SHMEM_TYPE_IGETMEM(_iget64, 8, shmem)
 224 SHMEM_TYPE_IGETMEM(_iget128, 16, shmem)
 225 

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