This source file includes following definitions.
- _shmem_alltoall
1
2
3
4
5
6
7
8
9
10
11
12 #include "oshmem_config.h"
13
14 #include "oshmem/constants.h"
15 #include "oshmem/include/shmem.h"
16
17 #include "oshmem/runtime/runtime.h"
18
19 #include "oshmem/mca/scoll/scoll.h"
20
21 #include "oshmem/proc/proc.h"
22
23 static void _shmem_alltoall(void *target,
24 const void *source,
25 ptrdiff_t dst, ptrdiff_t sst,
26 size_t nelems,
27 size_t element_size,
28 int PE_start,
29 int logPE_stride,
30 int PE_size,
31 long *pSync);
32
33 #define SHMEM_TYPE_ALLTOALL(name, element_size) \
34 void shmem##name(void *target, \
35 const void *source, \
36 size_t nelems, \
37 int PE_start, \
38 int logPE_stride, \
39 int PE_size, \
40 long *pSync) \
41 { \
42 RUNTIME_CHECK_INIT(); \
43 RUNTIME_CHECK_ADDR_SIZE(target, nelems); \
44 RUNTIME_CHECK_ADDR_SIZE(source, nelems); \
45 \
46 _shmem_alltoall(target, source, 1, 1, nelems, element_size, \
47 PE_start, logPE_stride, PE_size, \
48 pSync); \
49 }
50
51 #define SHMEM_TYPE_ALLTOALLS(name, element_size) \
52 void shmem##name(void *target, \
53 const void *source, \
54 ptrdiff_t dst, ptrdiff_t sst, \
55 size_t nelems, \
56 int PE_start, \
57 int logPE_stride, \
58 int PE_size, \
59 long *pSync) \
60 { \
61 RUNTIME_CHECK_INIT(); \
62 RUNTIME_CHECK_ADDR_SIZE(target, nelems); \
63 RUNTIME_CHECK_ADDR_SIZE(source, nelems); \
64 \
65 _shmem_alltoall(target, source, dst, sst, nelems, element_size, \
66 PE_start, logPE_stride, PE_size, \
67 pSync); \
68 }
69
70 static void _shmem_alltoall(void *target,
71 const void *source,
72 ptrdiff_t dst, ptrdiff_t sst,
73 size_t nelems,
74 size_t element_size,
75 int PE_start,
76 int logPE_stride,
77 int PE_size,
78 long *pSync)
79 {
80 int rc;
81 oshmem_group_t* group;
82
83
84 group = oshmem_proc_group_create_nofail(PE_start, 1<<logPE_stride, PE_size);
85
86 rc = group->g_scoll.scoll_alltoall(group,
87 target,
88 source,
89 dst,
90 sst,
91 nelems,
92 element_size,
93 pSync,
94 SCOLL_DEFAULT_ALG);
95 oshmem_proc_group_destroy(group);
96 RUNTIME_CHECK_RC(rc);
97 }
98
99 #if OSHMEM_PROFILING
100 #include "oshmem/include/pshmem.h"
101 #pragma weak shmem_alltoall32 = pshmem_alltoall32
102 #pragma weak shmem_alltoall64 = pshmem_alltoall64
103 #pragma weak shmem_alltoalls32 = pshmem_alltoalls32
104 #pragma weak shmem_alltoalls64 = pshmem_alltoalls64
105 #include "oshmem/shmem/c/profile/defines.h"
106 #endif
107
108 SHMEM_TYPE_ALLTOALL(_alltoall32, sizeof(uint32_t))
109 SHMEM_TYPE_ALLTOALL(_alltoall64, sizeof(uint64_t))
110 SHMEM_TYPE_ALLTOALLS(_alltoalls32, sizeof(uint32_t))
111 SHMEM_TYPE_ALLTOALLS(_alltoalls64, sizeof(uint64_t))