Skip to content

Commit 94bfabc

Browse files
authored
Merge pull request #2123 from alex-mikheev/topic/oshmem_c11_generics_v2.x
OSHMEM v1.3: adds fetch and set amos and c11 generic
2 parents ee139f5 + f5297cc commit 94bfabc

40 files changed

+1314
-139
lines changed

oshmem/include/pshmem.h

Lines changed: 202 additions & 8 deletions
Large diffs are not rendered by default.

oshmem/include/pshmemx.h

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,10 @@ OSHMEM_DECLSPEC void pshmemx_int64_p(int64_t* addr, int64_t value, int pe);
5050
/*
5151
* Block data put routines
5252
*/
53-
OSHMEM_DECLSPEC void pshmemx_put16(void *target, const void *source, size_t len, int pe);
5453

5554
/*
5655
* Strided put routines
5756
*/
58-
OSHMEM_DECLSPEC void pshmemx_iput16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
5957

6058
/*
6159
* Elemental get routines
@@ -67,12 +65,10 @@ OSHMEM_DECLSPEC int64_t pshmemx_int64_g(const int64_t* addr, int pe);
6765
/*
6866
* Block data get routines
6967
*/
70-
OSHMEM_DECLSPEC void pshmemx_get16(void *target, const void *source, size_t len, int pe);
7168

7269
/*
7370
* Strided get routines
7471
*/
75-
OSHMEM_DECLSPEC void pshmemx_iget16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
7672

7773
/*
7874
* Atomic operations
@@ -81,6 +77,10 @@ OSHMEM_DECLSPEC void pshmemx_iget16(void* target, const void* source, ptrdiff_t
8177
OSHMEM_DECLSPEC int32_t pshmemx_int32_swap(int32_t *target, int32_t value, int pe);
8278
OSHMEM_DECLSPEC int64_t pshmemx_int64_swap(int64_t *target, int64_t value, int pe);
8379

80+
/*Atomic set */
81+
OSHMEM_DECLSPEC void pshmemx_int32_set(int32_t *target, int32_t value, int pe);
82+
OSHMEM_DECLSPEC void pshmemx_int64_set(int64_t *target, int64_t value, int pe);
83+
8484
/* Atomic conditional swap */
8585
OSHMEM_DECLSPEC int32_t pshmemx_int32_cswap(int32_t *target, int32_t cond, int32_t value, int pe);
8686
OSHMEM_DECLSPEC int64_t pshmemx_int64_cswap(int64_t *target, int64_t cond, int64_t value, int pe);
@@ -89,6 +89,10 @@ OSHMEM_DECLSPEC int64_t pshmemx_int64_cswap(int64_t *target, int64_t cond, int64
8989
OSHMEM_DECLSPEC int32_t pshmemx_int32_fadd(int32_t *target, int32_t value, int pe);
9090
OSHMEM_DECLSPEC int64_t pshmemx_int64_fadd(int64_t *target, int64_t value, int pe);
9191

92+
/* Atomic Fetch */
93+
OSHMEM_DECLSPEC int32_t pshmemx_int32_fetch(const int32_t *target, int pe);
94+
OSHMEM_DECLSPEC int64_t pshmemx_int64_fetch(const int64_t *target, int pe);
95+
9296
/* Atomic Fetch&Inc */
9397
OSHMEM_DECLSPEC int32_t pshmemx_int32_finc(int32_t *target, int pe);
9498
OSHMEM_DECLSPEC int64_t pshmemx_int64_finc(int64_t *target, int pe);
@@ -148,27 +152,31 @@ OSHMEM_DECLSPEC void pshmemx_int64_prod_to_all(int64_t *target, const int64_t *s
148152
#define pshmem_int32_p pshmemx_int32_p
149153
#define pshmem_int64_p pshmemx_int64_p
150154

151-
#define pshmem_put16 pshmemx_put16
152-
#define pshmem_iput16 pshmemx_iput16
153-
154155
#define pshmem_int16_g pshmemx_int16_g
155156
#define pshmem_int32_g pshmemx_int32_g
156157
#define pshmem_int64_g pshmemx_int64_g
157158

158-
#define pshmem_get16 pshmemx_get16
159-
#define pshmem_iget16 pshmemx_iget16
160-
161159
#define pshmem_int32_swap pshmemx_int32_swap
162160
#define pshmem_int64_swap pshmemx_int64_swap
161+
162+
#define pshmem_int32_set pshmemx_int32_set
163+
#define pshmem_int64_set pshmemx_int64_set
164+
163165
#define pshmem_int32_cswap pshmemx_int32_cswap
164166
#define pshmem_int64_cswap pshmemx_int64_cswap
165167

166168
#define pshmem_int32_fadd pshmemx_int32_fadd
167169
#define pshmem_int64_fadd pshmemx_int64_fadd
170+
171+
#define pshmem_int32_fetch pshmemx_int32_fetch
172+
#define pshmem_int64_fetch pshmemx_int64_fetch
173+
168174
#define pshmem_int32_finc pshmemx_int32_finc
169175
#define pshmem_int64_finc pshmemx_int64_finc
176+
170177
#define pshmem_int32_add pshmemx_int32_add
171178
#define pshmem_int64_add pshmemx_int64_add
179+
172180
#define pshmem_int32_inc pshmemx_int32_inc
173181
#define pshmem_int64_inc pshmemx_int64_inc
174182

oshmem/include/shmem.h.in

Lines changed: 204 additions & 7 deletions
Large diffs are not rendered by default.

oshmem/include/shmemx.h

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@ OSHMEM_DECLSPEC void shmemx_int64_p(int64_t* addr, int64_t value, int pe);
3535
/*
3636
* Block data put routines
3737
*/
38-
OSHMEM_DECLSPEC void shmemx_put16(void *target, const void *source, size_t len, int pe);
3938

4039
/*
4140
* Strided put routines
4241
*/
43-
OSHMEM_DECLSPEC void shmemx_iput16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
4442

4543
/*
4644
* Elemental get routines
@@ -52,12 +50,10 @@ OSHMEM_DECLSPEC int64_t shmemx_int64_g(const int64_t* addr, int pe);
5250
/*
5351
* Block data get routines
5452
*/
55-
OSHMEM_DECLSPEC void shmemx_get16(void *target, const void *source, size_t len, int pe);
5653

5754
/*
5855
* Strided get routines
5956
*/
60-
OSHMEM_DECLSPEC void shmemx_iget16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
6157

6258
/*
6359
* Atomic operations
@@ -66,6 +62,10 @@ OSHMEM_DECLSPEC void shmemx_iget16(void* target, const void* source, ptrdiff_t t
6662
OSHMEM_DECLSPEC int32_t shmemx_int32_swap(int32_t *target, int32_t value, int pe);
6763
OSHMEM_DECLSPEC int64_t shmemx_int64_swap(int64_t *target, int64_t value, int pe);
6864

65+
/* Atomic set */
66+
OSHMEM_DECLSPEC void shmemx_int32_set(int32_t *target, int32_t value, int pe);
67+
OSHMEM_DECLSPEC void shmemx_int64_set(int64_t *target, int64_t value, int pe);
68+
6969
/* Atomic conditional swap */
7070
OSHMEM_DECLSPEC int32_t shmemx_int32_cswap(int32_t *target, int32_t cond, int32_t value, int pe);
7171
OSHMEM_DECLSPEC int64_t shmemx_int64_cswap(int64_t *target, int64_t cond, int64_t value, int pe);
@@ -74,6 +74,10 @@ OSHMEM_DECLSPEC int64_t shmemx_int64_cswap(int64_t *target, int64_t cond, int64_
7474
OSHMEM_DECLSPEC int32_t shmemx_int32_fadd(int32_t *target, int32_t value, int pe);
7575
OSHMEM_DECLSPEC int64_t shmemx_int64_fadd(int64_t *target, int64_t value, int pe);
7676

77+
/* Atomic Fetch */
78+
OSHMEM_DECLSPEC int32_t shmemx_int32_fetch(const int32_t *target, int pe);
79+
OSHMEM_DECLSPEC int64_t shmemx_int64_fetch(const int64_t *target, int pe);
80+
7781
/* Atomic Fetch&Inc */
7882
OSHMEM_DECLSPEC int32_t shmemx_int32_finc(int32_t *target, int pe);
7983
OSHMEM_DECLSPEC int64_t shmemx_int64_finc(int64_t *target, int pe);
@@ -133,25 +137,28 @@ OSHMEM_DECLSPEC void shmemx_int64_prod_to_all(int64_t *target, const int64_t *so
133137
#define shmem_int32_p shmemx_int32_p
134138
#define shmem_int64_p shmemx_int64_p
135139

136-
#define shmem_put16 shmemx_put16
137-
#define shmem_iput16 shmemx_iput16
138-
139140
#define shmem_int16_g shmemx_int16_g
140141
#define shmem_int32_g shmemx_int32_g
141142
#define shmem_int64_g shmemx_int64_g
142143

143-
#define shmem_get16 shmemx_get16
144-
#define shmem_iget16 shmemx_iget16
145-
146144
#define shmem_int32_swap shmemx_int32_swap
147145
#define shmem_int64_swap shmemx_int64_swap
146+
147+
#define shmem_int32_set shmemx_int32_set
148+
#define shmem_int64_set shmemx_int64_set
149+
148150
#define shmem_int32_cswap shmemx_int32_cswap
149151
#define shmem_int64_cswap shmemx_int64_cswap
150152

151153
#define shmem_int32_fadd shmemx_int32_fadd
152154
#define shmem_int64_fadd shmemx_int64_fadd
155+
156+
#define shmem_int32_fetch shmemx_int32_fetch
157+
#define shmem_int64_fetch shmemx_int64_fetch
158+
153159
#define shmem_int32_finc shmemx_int32_finc
154160
#define shmem_int64_finc shmemx_int64_finc
161+
155162
#define shmem_int32_add shmemx_int32_add
156163
#define shmem_int64_add shmemx_int64_add
157164
#define shmem_int32_inc shmemx_int32_inc

oshmem/shmem/c/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ OSHMEM_API_SOURCES = \
5151
shmem_clear_cache_line_inv.c \
5252
shmem_reduce.c \
5353
shmem_swap.c \
54+
shmem_set.c \
5455
shmem_cswap.c \
5556
shmem_fadd.c \
57+
shmem_fetch.c \
5658
shmem_finc.c \
5759
shmem_add.c \
5860
shmem_inc.c \

oshmem/shmem/c/profile/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,10 @@ OSHMEM_API_SOURCES = \
6363
pshmem_clear_cache_line_inv.c \
6464
pshmem_reduce.c \
6565
pshmem_swap.c \
66+
pshmem_set.c \
6667
pshmem_cswap.c \
6768
pshmem_fadd.c \
69+
pshmem_fetch.c \
6870
pshmem_finc.c \
6971
pshmem_add.c \
7072
pshmem_inc.c \

oshmem/shmem/c/profile/defines.h

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@
8686
#define shmem_double_put pshmem_double_put
8787
#define shmem_longlong_put pshmem_longlong_put
8888
#define shmem_longdouble_put pshmem_longdouble_put
89-
#define shmemx_put16 pshmemx_put16
89+
90+
#define shmem_put8 pshmem_put8
91+
#define shmem_put16 pshmem_put16
9092
#define shmem_put32 pshmem_put32
9193
#define shmem_put64 pshmem_put64
9294
#define shmem_put128 pshmem_put128
@@ -95,14 +97,17 @@
9597
/*
9698
* Strided put routines
9799
*/
98-
#define shmem_int_iput pshmem_int_iput
100+
#define shmem_char_iput pshmem_char_iput
99101
#define shmem_short_iput pshmem_short_iput
102+
#define shmem_int_iput pshmem_int_iput
100103
#define shmem_float_iput pshmem_float_iput
101104
#define shmem_double_iput pshmem_double_iput
102105
#define shmem_longlong_iput pshmem_longlong_iput
103106
#define shmem_longdouble_iput pshmem_longdouble_iput
104107
#define shmem_long_iput pshmem_long_iput
105-
#define shmemx_iput16 pshmemx_iput16
108+
109+
#define shmem_iput8 pshmem_iput8
110+
#define shmem_iput16 pshmem_iput16
106111
#define shmem_iput32 pshmem_iput32
107112
#define shmem_iput64 pshmem_iput64
108113
#define shmem_iput128 pshmem_iput128
@@ -151,7 +156,9 @@
151156
#define shmem_double_get pshmem_double_get
152157
#define shmem_longlong_get pshmem_longlong_get
153158
#define shmem_longdouble_get pshmem_longdouble_get
154-
#define shmemx_get16 pshmemx_get16
159+
160+
#define shmem_get8 pshmem_get8
161+
#define shmem_get16 pshmem_get16
155162
#define shmem_get32 pshmem_get32
156163
#define shmem_get64 pshmem_get64
157164
#define shmem_get128 pshmem_get128
@@ -160,14 +167,17 @@
160167
/*
161168
* Strided get routines
162169
*/
163-
#define shmem_int_iget pshmem_int_iget
170+
#define shmem_char_iget pshmem_char_iget
164171
#define shmem_short_iget pshmem_short_iget
172+
#define shmem_int_iget pshmem_int_iget
165173
#define shmem_float_iget pshmem_float_iget
166174
#define shmem_double_iget pshmem_double_iget
167175
#define shmem_longlong_iget pshmem_longlong_iget
168176
#define shmem_longdouble_iget pshmem_longdouble_iget
169177
#define shmem_long_iget pshmem_long_iget
170-
#define shmemx_iget16 pshmemx_iget16
178+
179+
#define shmem_iget8 pshmem_iget8
180+
#define shmem_iget16 pshmem_iget16
171181
#define shmem_iget32 pshmem_iget32
172182
#define shmem_iget64 pshmem_iget64
173183
#define shmem_iget128 pshmem_iget128
@@ -194,7 +204,6 @@
194204
* Atomic operations
195205
*/
196206
/* Atomic swap */
197-
#define shmem_swap pshmem_swap
198207
#define shmem_double_swap pshmem_double_swap
199208
#define shmem_float_swap pshmem_float_swap
200209
#define shmem_int_swap pshmem_int_swap
@@ -203,6 +212,14 @@
203212
#define shmemx_int32_swap pshmemx_int32_swap
204213
#define shmemx_int64_swap pshmemx_int64_swap
205214

215+
/* Atomic set */
216+
#define shmem_double_set pshmem_double_set
217+
#define shmem_float_set pshmem_float_set
218+
#define shmem_int_set pshmem_int_set
219+
#define shmem_long_set pshmem_long_set
220+
#define shmem_longlong_set pshmem_longlong_set
221+
#define shmemx_int32_set pshmemx_int32_set
222+
#define shmemx_int64_set pshmemx_int64_set
206223

207224
/* Atomic conditional swap */
208225
#define shmem_int_cswap pshmem_int_cswap
@@ -219,6 +236,15 @@
219236
#define shmemx_int32_fadd pshmemx_int32_fadd
220237
#define shmemx_int64_fadd pshmemx_int64_fadd
221238

239+
/* Atomic Fetch */
240+
#define shmem_double_fetch pshmem_double_fetch
241+
#define shmem_float_fetch pshmem_float_fetch
242+
#define shmem_int_fetch pshmem_int_fetch
243+
#define shmem_long_fetch pshmem_long_fetch
244+
#define shmem_longlong_fetch pshmem_longlong_fetch
245+
#define shmemx_int32_fetch pshmemx_int32_fetch
246+
#define shmemx_int64_fetch pshmemx_int64_fetch
247+
222248
/* Atomic Fetch&Inc */
223249
#define shmem_int_finc pshmem_int_finc
224250
#define shmem_long_finc pshmem_long_finc

oshmem/shmem/c/shmem_fetch.c

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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+
15+
#include "oshmem/runtime/runtime.h"
16+
17+
#include "oshmem/op/op.h"
18+
#include "oshmem/mca/atomic/atomic.h"
19+
20+
/*
21+
* These routines perform an atomic fetch operation.
22+
* The fetch routines retrieve the value at address target on PE pe.
23+
* The operation must be completed without the possibility of another process
24+
* updating target during the fetch.
25+
*/
26+
#define SHMEM_TYPE_FETCH(type_name, type, prefix) \
27+
type prefix##type_name##_fetch(const type *target, int pe) \
28+
{ \
29+
int rc = OSHMEM_SUCCESS; \
30+
size_t size = 0; \
31+
type out_value; \
32+
type value = 0; \
33+
oshmem_op_t* op = oshmem_op_sum##type_name; \
34+
\
35+
RUNTIME_CHECK_INIT(); \
36+
RUNTIME_CHECK_PE(pe); \
37+
RUNTIME_CHECK_ADDR(target); \
38+
\
39+
size = sizeof(out_value); \
40+
rc = MCA_ATOMIC_CALL(fadd( \
41+
(void*)target, \
42+
(void*)&out_value, \
43+
(const void*)&value, \
44+
size, \
45+
pe, \
46+
op)); \
47+
RUNTIME_CHECK_RC(rc); \
48+
\
49+
return out_value; \
50+
}
51+
52+
#if OSHMEM_PROFILING
53+
#include "oshmem/include/pshmem.h"
54+
#pragma weak shmem_int_fetch = pshmem_int_fetch
55+
#pragma weak shmem_long_fetch = pshmem_long_fetch
56+
#pragma weak shmem_longlong_fetch = pshmem_longlong_fetch
57+
#pragma weak shmem_double_fetch = pshmem_double_fetch
58+
#pragma weak shmem_float_fetch = pshmem_float_fetch
59+
#pragma weak shmemx_int32_fetch = pshmemx_int32_fetch
60+
#pragma weak shmemx_int64_fetch = pshmemx_int64_fetch
61+
#include "oshmem/shmem/c/profile/defines.h"
62+
#endif
63+
64+
SHMEM_TYPE_FETCH(_int, int, shmem)
65+
SHMEM_TYPE_FETCH(_long, long, shmem)
66+
SHMEM_TYPE_FETCH(_longlong, long long, shmem)
67+
SHMEM_TYPE_FETCH(_double, double, shmem)
68+
SHMEM_TYPE_FETCH(_float, float, shmem)
69+
SHMEM_TYPE_FETCH(_int32, int32_t, shmemx)
70+
SHMEM_TYPE_FETCH(_int64, int64_t, shmemx)
71+

oshmem/shmem/c/shmem_get.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@
5454
#pragma weak shmem_double_get = pshmem_double_get
5555
#pragma weak shmem_longdouble_get = pshmem_longdouble_get
5656
#pragma weak shmem_getmem = pshmem_getmem
57-
#pragma weak shmemx_get16 = pshmemx_get16
57+
#pragma weak shmem_get8 = pshmem_get8
58+
#pragma weak shmem_get16 = pshmem_get16
5859
#pragma weak shmem_get32 = pshmem_get32
5960
#pragma weak shmem_get64 = pshmem_get64
6061
#pragma weak shmem_get128 = pshmem_get128
@@ -92,9 +93,9 @@ SHMEM_TYPE_GET(_longdouble, long double)
9293
}
9394

9495
SHMEM_TYPE_GETMEM(_getmem, 1, shmem)
95-
SHMEM_TYPE_GETMEM(_get16, 2, shmemx)
96+
SHMEM_TYPE_GETMEM(_get8, 1, shmem)
97+
SHMEM_TYPE_GETMEM(_get16, 2, shmem)
9698
SHMEM_TYPE_GETMEM(_get32, 4, shmem)
9799
SHMEM_TYPE_GETMEM(_get64, 8, shmem)
98100
SHMEM_TYPE_GETMEM(_get128, 16, shmem)
99101

100-
SHMEM_TYPE_GETMEM(_get, sizeof(long), shmem)

0 commit comments

Comments
 (0)