root/oshmem/shmem/c/shmem_set.c

/* [<][>][^][v][top][bottom][index][help] */
   1 /*
   2  * Copyright (c) 2016      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/atomic/atomic.h"
  19 
  20 /*
  21  * shmem_set performs an atomic set operation.
  22  * The atomic set routines write value to address target on PE pe.
  23  * The operation must be completed without the possibility of another
  24  * process updating the target during the set.
  25  */
  26 #define DO_SHMEM_TYPE_ATOMIC_SET(ctx, type, target, value, pe) do { \
  27         int rc = OSHMEM_SUCCESS;                                    \
  28         size_t size = 0;                                            \
  29         type out_value;                                             \
  30                                                                     \
  31         RUNTIME_CHECK_INIT();                                       \
  32         RUNTIME_CHECK_PE(pe);                                       \
  33         RUNTIME_CHECK_ADDR(target);                                 \
  34                                                                     \
  35         size = sizeof(out_value);                                   \
  36         rc = MCA_ATOMIC_CALL(swap(                                  \
  37             ctx,                                                    \
  38             (void*)target,                                          \
  39             (void*)&out_value,                                      \
  40             value,                                                  \
  41             size,                                                   \
  42             pe));                                                   \
  43         RUNTIME_CHECK_RC(rc);                                       \
  44     } while (0)
  45 
  46 #define SHMEM_CTX_TYPE_ATOMIC_SET(type_name, type, prefix)          \
  47     void prefix##_ctx##type_name##_atomic_set(shmem_ctx_t ctx, type *target, type value, int pe) \
  48     {                                                               \
  49         DO_SHMEM_TYPE_ATOMIC_SET(ctx, type, target, value, pe);     \
  50         return;                                                     \
  51     }
  52 
  53 #define SHMEM_TYPE_ATOMIC_SET(type_name, type, prefix)              \
  54     void prefix##type_name##_atomic_set(type *target, type value, int pe) \
  55     {                                                               \
  56         DO_SHMEM_TYPE_ATOMIC_SET(oshmem_ctx_default, type, target, value, pe); \
  57         return;                                                     \
  58     }
  59 
  60 #if OSHMEM_PROFILING
  61 #include "oshmem/include/pshmem.h"
  62 #pragma weak shmem_ctx_int_atomic_set = pshmem_ctx_int_atomic_set
  63 #pragma weak shmem_ctx_long_atomic_set = pshmem_ctx_long_atomic_set
  64 #pragma weak shmem_ctx_longlong_atomic_set = pshmem_ctx_longlong_atomic_set
  65 #pragma weak shmem_ctx_uint_atomic_set = pshmem_ctx_uint_atomic_set
  66 #pragma weak shmem_ctx_ulong_atomic_set = pshmem_ctx_ulong_atomic_set
  67 #pragma weak shmem_ctx_ulonglong_atomic_set = pshmem_ctx_ulonglong_atomic_set
  68 #pragma weak shmem_ctx_float_atomic_set = pshmem_ctx_float_atomic_set
  69 #pragma weak shmem_ctx_double_atomic_set = pshmem_ctx_double_atomic_set
  70 
  71 #pragma weak shmem_int_atomic_set = pshmem_int_atomic_set
  72 #pragma weak shmem_long_atomic_set = pshmem_long_atomic_set
  73 #pragma weak shmem_longlong_atomic_set = pshmem_longlong_atomic_set
  74 #pragma weak shmem_uint_atomic_set = pshmem_uint_atomic_set
  75 #pragma weak shmem_ulong_atomic_set = pshmem_ulong_atomic_set
  76 #pragma weak shmem_ulonglong_atomic_set = pshmem_ulonglong_atomic_set
  77 #pragma weak shmem_float_atomic_set = pshmem_float_atomic_set
  78 #pragma weak shmem_double_atomic_set = pshmem_double_atomic_set
  79 
  80 #pragma weak shmem_int_set = pshmem_int_set
  81 #pragma weak shmem_long_set = pshmem_long_set
  82 #pragma weak shmem_longlong_set = pshmem_longlong_set
  83 #pragma weak shmem_float_set = pshmem_float_set
  84 #pragma weak shmem_double_set = pshmem_double_set
  85 
  86 #pragma weak shmemx_int32_set = pshmemx_int32_set
  87 #pragma weak shmemx_int64_set = pshmemx_int64_set
  88 #include "oshmem/shmem/c/profile/defines.h"
  89 #endif
  90 
  91 SHMEM_CTX_TYPE_ATOMIC_SET(_int, int, shmem)
  92 SHMEM_CTX_TYPE_ATOMIC_SET(_long, long, shmem)
  93 SHMEM_CTX_TYPE_ATOMIC_SET(_longlong, long long, shmem)
  94 SHMEM_CTX_TYPE_ATOMIC_SET(_uint, unsigned int, shmem)
  95 SHMEM_CTX_TYPE_ATOMIC_SET(_ulong, unsigned long, shmem)
  96 SHMEM_CTX_TYPE_ATOMIC_SET(_ulonglong, unsigned long long, shmem)
  97 SHMEM_CTX_TYPE_ATOMIC_SET(_float, float, shmem)
  98 SHMEM_CTX_TYPE_ATOMIC_SET(_double, double, shmem)
  99 SHMEM_TYPE_ATOMIC_SET(_int, int, shmem)
 100 SHMEM_TYPE_ATOMIC_SET(_long, long, shmem)
 101 SHMEM_TYPE_ATOMIC_SET(_longlong, long long, shmem)
 102 SHMEM_TYPE_ATOMIC_SET(_uint, unsigned int, shmem)
 103 SHMEM_TYPE_ATOMIC_SET(_ulong, unsigned long, shmem)
 104 SHMEM_TYPE_ATOMIC_SET(_ulonglong, unsigned long long, shmem)
 105 SHMEM_TYPE_ATOMIC_SET(_float, float, shmem)
 106 SHMEM_TYPE_ATOMIC_SET(_double, double, shmem)
 107 
 108 /* deprecated APIs */
 109 #define SHMEM_TYPE_SET(type_name, type, prefix)                     \
 110     void prefix##type_name##_set(type *target, type value, int pe)  \
 111     {                                                               \
 112         DO_SHMEM_TYPE_ATOMIC_SET(oshmem_ctx_default, type, target, value, pe); \
 113         return;                                                     \
 114     }
 115 SHMEM_TYPE_SET(_int, int, shmem)
 116 SHMEM_TYPE_SET(_long, long, shmem)
 117 SHMEM_TYPE_SET(_longlong, long long, shmem)
 118 SHMEM_TYPE_SET(_float, float, shmem)
 119 SHMEM_TYPE_SET(_double, double, shmem)
 120 SHMEM_TYPE_SET(_int32, int32_t, shmemx)
 121 SHMEM_TYPE_SET(_int64, int64_t, shmemx)
 122 

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