1
2
3
4
5
6
7
8
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
22
23
24
25 #define SHMEM_TYPE_WAIT(type_name, type, code, prefix) \
26 void prefix##type_name##_wait(type *addr, type value) \
27 { \
28 int rc = OSHMEM_SUCCESS; \
29 \
30 RUNTIME_CHECK_INIT(); \
31 \
32 rc = MCA_SPML_CALL(wait( \
33 (void*)addr, \
34 SHMEM_CMP_NE, \
35 (void*)&value, \
36 code)); \
37 RUNTIME_CHECK_RC(rc); \
38 \
39 return ; \
40 }
41
42 #if OSHMEM_PROFILING
43 #include "oshmem/include/pshmem.h"
44 #pragma weak shmem_wait = pshmem_wait
45 #pragma weak shmem_short_wait = pshmem_short_wait
46 #pragma weak shmem_int_wait = pshmem_int_wait
47 #pragma weak shmem_long_wait = pshmem_long_wait
48 #pragma weak shmem_longlong_wait = pshmem_longlong_wait
49 #pragma weak shmemx_int32_wait = pshmemx_int32_wait
50 #pragma weak shmemx_int64_wait = pshmemx_int64_wait
51
52 #pragma weak shmem_short_wait_until = pshmem_short_wait_until
53 #pragma weak shmem_int_wait_until = pshmem_int_wait_until
54 #pragma weak shmem_long_wait_until = pshmem_long_wait_until
55 #pragma weak shmem_longlong_wait_until = pshmem_longlong_wait_until
56 #pragma weak shmem_ushort_wait_until = pshmem_ushort_wait_until
57 #pragma weak shmem_uint_wait_until = pshmem_uint_wait_until
58 #pragma weak shmem_ulong_wait_until = pshmem_ulong_wait_until
59 #pragma weak shmem_ulonglong_wait_until = pshmem_ulonglong_wait_until
60 #pragma weak shmem_int32_wait_until = pshmem_int32_wait_until
61 #pragma weak shmem_int64_wait_until = pshmem_int64_wait_until
62 #pragma weak shmem_uint32_wait_until = pshmem_uint32_wait_until
63 #pragma weak shmem_uint64_wait_until = pshmem_uint64_wait_until
64 #pragma weak shmem_size_wait_until = pshmem_size_wait_until
65 #pragma weak shmem_ptrdiff_wait_until = pshmem_ptrdiff_wait_until
66
67 #pragma weak shmemx_int32_wait_until = pshmemx_int32_wait_until
68 #pragma weak shmemx_int64_wait_until = pshmemx_int64_wait_until
69
70 #pragma weak shmem_short_test = pshmem_short_test
71 #pragma weak shmem_int_test = pshmem_int_test
72 #pragma weak shmem_long_test = pshmem_long_test
73 #pragma weak shmem_longlong_test = pshmem_longlong_test
74 #pragma weak shmem_ushort_test = pshmem_ushort_test
75 #pragma weak shmem_uint_test = pshmem_uint_test
76 #pragma weak shmem_ulong_test = pshmem_ulong_test
77 #pragma weak shmem_ulonglong_test = pshmem_ulonglong_test
78 #pragma weak shmem_int32_test = pshmem_int32_test
79 #pragma weak shmem_int64_test = pshmem_int64_test
80 #pragma weak shmem_uint32_test = pshmem_uint32_test
81 #pragma weak shmem_uint64_test = pshmem_uint64_test
82 #pragma weak shmem_size_test = pshmem_size_test
83 #pragma weak shmem_ptrdiff_test = pshmem_ptrdiff_test
84 #include "oshmem/shmem/c/profile/defines.h"
85 #endif
86
87 SHMEM_TYPE_WAIT(, volatile long, SHMEM_LONG, shmem)
88 SHMEM_TYPE_WAIT(_short, volatile short, SHMEM_SHORT, shmem)
89 SHMEM_TYPE_WAIT(_int, volatile int, SHMEM_INT, shmem)
90 SHMEM_TYPE_WAIT(_long, volatile long, SHMEM_LONG, shmem)
91 SHMEM_TYPE_WAIT(_longlong, volatile long long, SHMEM_LLONG, shmem)
92 SHMEM_TYPE_WAIT(_int32, int32_t, SHMEM_INT32_T, shmemx)
93 SHMEM_TYPE_WAIT(_int64, int64_t, SHMEM_INT64_T, shmemx)
94
95 #define SHMEM_TYPE_WAIT_UNTIL(type_name, type, code, prefix) \
96 void prefix##type_name##_wait_until(type *addr, int cmp, type value) \
97 { \
98 int rc = OSHMEM_SUCCESS; \
99 \
100 RUNTIME_CHECK_INIT(); \
101 \
102 rc = MCA_SPML_CALL(wait( \
103 (void*)addr, \
104 cmp, \
105 (void*)&value, \
106 code)); \
107 RUNTIME_CHECK_RC(rc); \
108 \
109 return ; \
110 }
111
112 SHMEM_TYPE_WAIT_UNTIL(_short, volatile short, SHMEM_SHORT, shmem)
113 SHMEM_TYPE_WAIT_UNTIL(_int, volatile int, SHMEM_INT, shmem)
114 SHMEM_TYPE_WAIT_UNTIL(_long, volatile long, SHMEM_LONG, shmem)
115 SHMEM_TYPE_WAIT_UNTIL(_longlong, volatile long long, SHMEM_LLONG, shmem)
116 SHMEM_TYPE_WAIT_UNTIL(_ushort, volatile unsigned short, SHMEM_SHORT, shmem)
117 SHMEM_TYPE_WAIT_UNTIL(_uint, volatile unsigned int, SHMEM_INT, shmem)
118 SHMEM_TYPE_WAIT_UNTIL(_ulong, volatile unsigned long, SHMEM_LONG, shmem)
119 SHMEM_TYPE_WAIT_UNTIL(_ulonglong, volatile unsigned long long, SHMEM_LLONG, shmem)
120 SHMEM_TYPE_WAIT_UNTIL(_int32, volatile int32_t, SHMEM_LLONG, shmem)
121 SHMEM_TYPE_WAIT_UNTIL(_int64, volatile int64_t, SHMEM_LLONG, shmem)
122 SHMEM_TYPE_WAIT_UNTIL(_uint32, volatile uint32_t, SHMEM_LLONG, shmem)
123 SHMEM_TYPE_WAIT_UNTIL(_uint64, volatile uint64_t, SHMEM_LLONG, shmem)
124 SHMEM_TYPE_WAIT_UNTIL(_size, volatile size_t, SHMEM_LLONG, shmem)
125 SHMEM_TYPE_WAIT_UNTIL(_ptrdiff, volatile ptrdiff_t, SHMEM_LLONG, shmem)
126
127 SHMEM_TYPE_WAIT_UNTIL(_int32, int32_t, SHMEM_INT32_T, shmemx)
128 SHMEM_TYPE_WAIT_UNTIL(_int64, int64_t, SHMEM_INT64_T, shmemx)
129
130 #define SHMEM_TYPE_TEST(type_name, type, code, prefix) \
131 int prefix##type_name##_test(type *addr, int cmp, type value) \
132 { \
133 int rc = OSHMEM_SUCCESS; \
134 int out_value; \
135 \
136 RUNTIME_CHECK_INIT(); \
137 \
138 rc = MCA_SPML_CALL(test( \
139 (void*)addr, \
140 cmp, \
141 (void*)&value, \
142 code, &out_value)); \
143 RUNTIME_CHECK_RC(rc); \
144 \
145 return out_value; \
146 }
147
148 SHMEM_TYPE_TEST(_short, volatile short, SHMEM_SHORT, shmem)
149 SHMEM_TYPE_TEST(_int, volatile int, SHMEM_INT, shmem)
150 SHMEM_TYPE_TEST(_long, volatile long, SHMEM_LONG, shmem)
151 SHMEM_TYPE_TEST(_longlong, volatile long long, SHMEM_LLONG, shmem)
152 SHMEM_TYPE_TEST(_ushort, volatile unsigned short, SHMEM_SHORT, shmem)
153 SHMEM_TYPE_TEST(_uint, volatile unsigned int, SHMEM_INT, shmem)
154 SHMEM_TYPE_TEST(_ulong, volatile unsigned long, SHMEM_LONG, shmem)
155 SHMEM_TYPE_TEST(_ulonglong, volatile unsigned long long, SHMEM_LLONG, shmem)
156 SHMEM_TYPE_TEST(_int32, volatile int32_t, SHMEM_LLONG, shmem)
157 SHMEM_TYPE_TEST(_int64, volatile int64_t, SHMEM_LLONG, shmem)
158 SHMEM_TYPE_TEST(_uint32, volatile uint32_t, SHMEM_LLONG, shmem)
159 SHMEM_TYPE_TEST(_uint64, volatile uint64_t, SHMEM_LLONG, shmem)
160 SHMEM_TYPE_TEST(_size, volatile size_t, SHMEM_LLONG, shmem)
161 SHMEM_TYPE_TEST(_ptrdiff, volatile ptrdiff_t, SHMEM_LLONG, shmem)