Skip to content

Commit 1bed5d8

Browse files
committed
oshmem: Align OSHMEM API with spec v1.3 (update scoll/basic)
1 parent 9825157 commit 1bed5d8

File tree

6 files changed

+131
-24
lines changed

6 files changed

+131
-24
lines changed

oshmem/include/shmem.h.in

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -193,24 +193,6 @@ OSHMEM_DECLSPEC void shmem_iput32(void* target, const void* source, ptrdiff_t ts
193193
OSHMEM_DECLSPEC void shmem_iput64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
194194
OSHMEM_DECLSPEC void shmem_iput128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
195195

196-
/*
197-
* Nonblocking put routines
198-
*/
199-
OSHMEM_DECLSPEC void shmem_putmem_nbi(void *target, const void *source, size_t len, int pe);
200-
OSHMEM_DECLSPEC void shmem_char_put_nbi(char *target, const char *source, size_t len, int pe);
201-
OSHMEM_DECLSPEC void shmem_short_put_nbi(short *target, const short *source, size_t len, int pe);
202-
OSHMEM_DECLSPEC void shmem_int_put_nbi(int* target, const int* source, size_t len, int pe);
203-
OSHMEM_DECLSPEC void shmem_long_put_nbi(long *target, const long *source, size_t len, int pe);
204-
OSHMEM_DECLSPEC void shmem_longlong_put_nbi(long long *target, const long long *source, size_t len, int pe);
205-
OSHMEM_DECLSPEC void shmem_float_put_nbi(float *target, const float *source, size_t len, int pe);
206-
OSHMEM_DECLSPEC void shmem_double_put_nbi(double *target, const double *source, size_t len, int pe);
207-
OSHMEM_DECLSPEC void shmem_longdouble_put_nbi(long double *target, const long double *source, size_t len, int pe);
208-
OSHMEM_DECLSPEC void shmem_put8_nbi(void *target, const void *source, size_t len, int pe);
209-
OSHMEM_DECLSPEC void shmem_put16_nbi(void *target, const void *source, size_t len, int pe);
210-
OSHMEM_DECLSPEC void shmem_put32_nbi(void *target, const void *source, size_t len, int pe);
211-
OSHMEM_DECLSPEC void shmem_put64_nbi(void *target, const void *source, size_t len, int pe);
212-
OSHMEM_DECLSPEC void shmem_put128_nbi(void *target, const void *source, size_t len, int pe);
213-
214196
/*
215197
* Elemental get routines
216198
*/
@@ -346,6 +328,11 @@ OSHMEM_DECLSPEC void shmem_collect32(void *target, const void *source, size_t nl
346328
OSHMEM_DECLSPEC void shmem_collect64(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
347329
OSHMEM_DECLSPEC void shmem_fcollect32(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
348330
OSHMEM_DECLSPEC void shmem_fcollect64(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
331+
OSHMEM_DECLSPEC void shmem_alltoall32(void *target, const void *source, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
332+
OSHMEM_DECLSPEC void shmem_alltoall64(void *target, const void *source, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
333+
OSHMEM_DECLSPEC void shmem_alltoalls32(void *target, const void *source, ptrdiff_t dst, ptrdiff_t sst, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
334+
OSHMEM_DECLSPEC void shmem_alltoalls64(void *target, const void *source, ptrdiff_t dst, ptrdiff_t sst, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
335+
349336

350337
/*
351338
* Reduction routines

oshmem/mca/scoll/basic/scoll_basic.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ int mca_scoll_basic_alltoall(struct oshmem_group_t *group,
8181
void *target,
8282
const void *source,
8383
ptrdiff_t dst, ptrdiff_t sst,
84-
size_t nlong,
84+
size_t nelems,
85+
size_t element_size,
8586
long *pSync,
8687
int alg);
8788

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
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+
11+
#include "oshmem_config.h"
12+
#include <stdio.h>
13+
#include <stdlib.h>
14+
15+
#include "oshmem/constants.h"
16+
#include "oshmem/op/op.h"
17+
#include "oshmem/mca/spml/spml.h"
18+
#include "oshmem/mca/scoll/scoll.h"
19+
#include "oshmem/mca/scoll/base/base.h"
20+
#include "scoll_basic.h"
21+
22+
static int _algorithm_simple(struct oshmem_group_t *group,
23+
void *target,
24+
const void *source,
25+
ptrdiff_t dst, ptrdiff_t sst,
26+
size_t nelems,
27+
size_t element_size,
28+
long *pSync);
29+
30+
int mca_scoll_basic_alltoall(struct oshmem_group_t *group,
31+
void *target,
32+
const void *source,
33+
ptrdiff_t dst, ptrdiff_t sst,
34+
size_t nelems,
35+
size_t element_size,
36+
long *pSync,
37+
int alg)
38+
{
39+
int rc = OSHMEM_SUCCESS;
40+
41+
/* Arguments validation */
42+
if (!group) {
43+
SCOLL_ERROR("Active set (group) of PE is not defined");
44+
rc = OSHMEM_ERR_BAD_PARAM;
45+
}
46+
47+
/* Check if this PE is part of the group */
48+
if ((rc == OSHMEM_SUCCESS) && oshmem_proc_group_is_member(group)) {
49+
int i = 0;
50+
51+
if (pSync) {
52+
rc = _algorithm_simple(group,
53+
target,
54+
source,
55+
dst,
56+
sst,
57+
nelems,
58+
element_size,
59+
pSync);
60+
} else {
61+
SCOLL_ERROR("Incorrect argument pSync");
62+
rc = OSHMEM_ERR_BAD_PARAM;
63+
}
64+
65+
/* Restore initial values */
66+
SCOLL_VERBOSE(12,
67+
"PE#%d Restore special synchronization array",
68+
group->my_pe);
69+
for (i = 0; pSync && (i < _SHMEM_ALLTOALL_SYNC_SIZE); i++) {
70+
pSync[i] = _SHMEM_SYNC_VALUE;
71+
}
72+
}
73+
74+
return rc;
75+
}
76+
77+
static int _algorithm_simple(struct oshmem_group_t *group,
78+
void *target,
79+
const void *source,
80+
ptrdiff_t tst, ptrdiff_t sst,
81+
size_t nelems,
82+
size_t element_size,
83+
long *pSync)
84+
{
85+
int rc = OSHMEM_SUCCESS;
86+
int pe_cur;
87+
int i;
88+
int j;
89+
int k;
90+
91+
SCOLL_VERBOSE(14,
92+
"[#%d] send data to all PE in the group",
93+
group->my_pe);
94+
j = oshmem_proc_group_find_id(group, group->my_pe);
95+
for (i = 0; i < group->proc_count; i++) {
96+
/* index permutation for better distribution of traffic */
97+
k = (((j)+(i))%(group->proc_count));
98+
pe_cur = oshmem_proc_pe(group->proc_array[k]);
99+
rc = MCA_SPML_CALL(put(
100+
(void *)((char *)target + j * tst * nelems * element_size),
101+
nelems * element_size,
102+
(void *)((char *)source + i * sst * nelems * element_size),
103+
pe_cur));
104+
if (OSHMEM_SUCCESS != rc) {
105+
break;
106+
}
107+
}
108+
109+
/* Wait for operation completion */
110+
if (rc == OSHMEM_SUCCESS) {
111+
SCOLL_VERBOSE(14, "[#%d] Wait for operation completion", group->my_pe);
112+
rc = BARRIER_FUNC(group,
113+
(pSync + 1),
114+
SCOLL_DEFAULT_ALG);
115+
}
116+
117+
return rc;
118+
}

oshmem/mca/scoll/scoll.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ typedef int (*mca_scoll_base_module_alltoall_fn_t)(struct oshmem_group_t *group,
142142
void *target,
143143
const void *source,
144144
ptrdiff_t dst, ptrdiff_t sst,
145-
size_t nlong,
145+
size_t nelems,
146+
size_t element_size,
146147
long *pSync,
147148
int alg);
148149

oshmem/shmem/c/shmem_alltoall.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static void _shmem_alltoall(void *target,
4444
RUNTIME_CHECK_ADDR(target); \
4545
RUNTIME_CHECK_ADDR(source); \
4646
\
47-
_shmem_alltoall(target, source, 1, 1, nelems * element_size, \
47+
_shmem_alltoall(target, source, 1, 1, nelems, element_size, \
4848
PE_start, logPE_stride, PE_size, \
4949
pSync); \
5050
}
@@ -63,7 +63,7 @@ static void _shmem_alltoall(void *target,
6363
RUNTIME_CHECK_ADDR(target); \
6464
RUNTIME_CHECK_ADDR(source); \
6565
\
66-
_shmem_alltoall(target, source, dst, sst, nelems * element_size, \
66+
_shmem_alltoall(target, source, dst, sst, nelems, element_size, \
6767
PE_start, logPE_stride, PE_size, \
6868
pSync); \
6969
}

oshmem/shmem/fortran/shmem_alltoall_f.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void,
169169
rc = group->g_scoll.scoll_alltoall( group, \
170170
FPTR_2_VOID_PTR(target), \
171171
FPTR_2_VOID_PTR(source), \
172-
OMPI_FINT_2_INT(*dst), \
173-
OMPI_FINT_2_INT(*sst), \
172+
OMPI_FINT_2_INT(*dst), \
173+
OMPI_FINT_2_INT(*sst), \
174174
OMPI_FINT_2_INT(*nlong), \
175175
op->dt_size, \
176176
FPTR_2_VOID_PTR(pSync), SCOLL_DEFAULT_ALG );\

0 commit comments

Comments
 (0)