1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef OSHMEM_MCA_SCOLL_H
22 #define OSHMEM_MCA_SCOLL_H
23
24 #include "oshmem_config.h"
25 #include "oshmem/types.h"
26 #include "oshmem/constants.h"
27
28 #include "opal/util/output.h"
29 #include "mpi.h"
30 #include "oshmem/mca/mca.h"
31 #include "opal/mca/base/base.h"
32
33 BEGIN_C_DECLS
34
35
36
37 struct oshmem_group_t;
38 struct oshmem_op_t;
39
40
41
42 typedef int (*mca_scoll_base_component_init_fn_t)(bool enable_progress_threads,
43 bool enable_threads);
44
45 typedef struct mca_scoll_base_module_1_0_0_t* (*mca_scoll_base_component_query_fn_t)(struct oshmem_group_t *group,
46 int *priority);
47
48
49
50
51
52
53
54
55
56
57
58 struct mca_scoll_base_component_1_0_0_t {
59
60 mca_base_component_t scoll_version;
61
62 mca_base_component_data_t scoll_data;
63
64
65 mca_scoll_base_component_init_fn_t scoll_init;
66 mca_scoll_base_component_query_fn_t scoll_query;
67 };
68 typedef struct mca_scoll_base_component_1_0_0_t mca_scoll_base_component_1_0_0_t;
69
70
71
72
73 typedef struct mca_scoll_base_component_1_0_0_t mca_scoll_base_component_t;
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 typedef int
90 (*mca_scoll_base_module_enable_1_0_0_fn_t)(struct mca_scoll_base_module_1_0_0_t* module,
91 struct oshmem_group_t *comm);
92
93 #define SCOLL_DEFAULT_ALG (-1)
94
95 #define SCOLL_ALG_BARRIER_CENTRAL_COUNTER 0
96 #define SCOLL_ALG_BARRIER_TOURNAMENT 1
97 #define SCOLL_ALG_BARRIER_RECURSIVE_DOUBLING 2
98 #define SCOLL_ALG_BARRIER_DISSEMINATION 3
99 #define SCOLL_ALG_BARRIER_BASIC 4
100 #define SCOLL_ALG_BARRIER_ADAPTIVE 5
101
102 #define SCOLL_ALG_BROADCAST_CENTRAL_COUNTER 0
103 #define SCOLL_ALG_BROADCAST_BINOMIAL 1
104
105 #define SCOLL_ALG_COLLECT_CENTRAL_COUNTER 0
106 #define SCOLL_ALG_COLLECT_TOURNAMENT 1
107 #define SCOLL_ALG_COLLECT_RECURSIVE_DOUBLING 2
108 #define SCOLL_ALG_COLLECT_RING 3
109
110 #define SCOLL_ALG_REDUCE_CENTRAL_COUNTER 0
111 #define SCOLL_ALG_REDUCE_TOURNAMENT 1
112 #define SCOLL_ALG_REDUCE_RECURSIVE_DOUBLING 2
113 #define SCOLL_ALG_REDUCE_LEGACY_LINEAR 3
114 #define SCOLL_ALG_REDUCE_LEGACY_LOG 4
115
116 typedef int (*mca_scoll_base_module_barrier_fn_t)(struct oshmem_group_t *group,
117 long *pSync,
118 int alg);
119 typedef int (*mca_scoll_base_module_broadcast_fn_t)(struct oshmem_group_t *group,
120 int PE_root,
121 void *target,
122 const void *source,
123 size_t nlong,
124 long *pSync,
125 bool nlong_type,
126 int alg);
127 typedef int (*mca_scoll_base_module_collect_fn_t)(struct oshmem_group_t *group,
128 void *target,
129 const void *source,
130 size_t nlong,
131 long *pSync,
132 bool nlong_type,
133 int alg);
134 typedef int (*mca_scoll_base_module_reduce_fn_t)(struct oshmem_group_t *group,
135 struct oshmem_op_t *op,
136 void *target,
137 const void *source,
138 size_t nlong,
139 long *pSync,
140 void *pWrk,
141 int alg);
142 typedef int (*mca_scoll_base_module_alltoall_fn_t)(struct oshmem_group_t *group,
143 void *target,
144 const void *source,
145 ptrdiff_t dst, ptrdiff_t sst,
146 size_t nelems,
147 size_t element_size,
148 long *pSync,
149 int alg);
150
151 struct mca_scoll_base_module_1_0_0_t {
152
153 opal_object_t super;
154
155
156 mca_scoll_base_module_barrier_fn_t scoll_barrier;
157 mca_scoll_base_module_broadcast_fn_t scoll_broadcast;
158 mca_scoll_base_module_collect_fn_t scoll_collect;
159 mca_scoll_base_module_reduce_fn_t scoll_reduce;
160 mca_scoll_base_module_alltoall_fn_t scoll_alltoall;
161 mca_scoll_base_module_enable_1_0_0_fn_t scoll_module_enable;
162 };
163 typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_1_0_0_t;
164
165
166
167
168 typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_t;
169 OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(mca_scoll_base_module_t);
170
171
172
173
174
175
176 #define MCA_SCOLL_BASE_VERSION_2_0_0 \
177 OSHMEM_MCA_BASE_VERSION_2_1_0("scoll", 1, 0, 0)
178
179
180
181
182
183
184
185
186 struct mca_scoll_base_group_scoll_t {
187 mca_scoll_base_module_barrier_fn_t scoll_barrier;
188 mca_scoll_base_module_1_0_0_t *scoll_barrier_module;
189 mca_scoll_base_module_broadcast_fn_t scoll_broadcast;
190 mca_scoll_base_module_1_0_0_t *scoll_broadcast_module;
191 mca_scoll_base_module_collect_fn_t scoll_collect;
192 mca_scoll_base_module_1_0_0_t *scoll_collect_module;
193 mca_scoll_base_module_reduce_fn_t scoll_reduce;
194 mca_scoll_base_module_1_0_0_t *scoll_reduce_module;
195 mca_scoll_base_module_alltoall_fn_t scoll_alltoall;
196 mca_scoll_base_module_1_0_0_t *scoll_alltoall_module;
197 };
198 typedef struct mca_scoll_base_group_scoll_t mca_scoll_base_group_scoll_t;
199
200 #define PREVIOUS_SCOLL_FN(module, __api, group, ...) do { \
201 group->g_scoll.scoll_ ## __api ## _module = (mca_scoll_base_module_1_0_0_t*) module->previous_ ## __api ## _module; \
202 rc = module->previous_ ## __api (group, __VA_ARGS__); \
203 group->g_scoll.scoll_ ## __api ## _module = (mca_scoll_base_module_1_0_0_t*) module; \
204 } while(0)
205
206 END_C_DECLS
207
208 #endif