@@ -33,6 +33,69 @@ static bool __group_cache_enabled = true;
3333 * logPE_stride and PE_size.
3434 */
3535#define SHMEM_TYPE_REDUCE_OP (name , type_name , type , prefix ) \
36+ void prefix##type_name##_##name##_to_all( type *target, \
37+ const type *source, \
38+ int nreduce, \
39+ int PE_start, \
40+ int logPE_stride, \
41+ int PE_size, \
42+ type *pWrk, \
43+ long *pSync ) \
44+ { \
45+ int rc = OSHMEM_SUCCESS; \
46+ oshmem_group_t* group = NULL; \
47+ \
48+ RUNTIME_CHECK_INIT(); \
49+ RUNTIME_CHECK_ADDR(target); \
50+ RUNTIME_CHECK_ADDR(source); \
51+ \
52+ { \
53+ /* Create group basing PE_start, logPE_stride and PE_size */ \
54+ if (!__group_cache_enabled ) \
55+ { \
56+ group = oshmem_proc_group_create (PE_start , (1 << logPE_stride ), PE_size ); \
57+ if (!group ) \
58+ rc = OSHMEM_ERROR ; \
59+ } \
60+ else \
61+ { \
62+ group = find_group_in_cache (PE_start ,logPE_stride ,PE_size ); \
63+ if (!group ) \
64+ { \
65+ group = oshmem_proc_group_create (PE_start , (1 << logPE_stride ), PE_size ); \
66+ if (!group ) \
67+ rc = OSHMEM_ERROR ; \
68+ cache_group (group ,PE_start ,logPE_stride ,PE_size ); \
69+ } \
70+ } \
71+ \
72+ /* Collective operation call */ \
73+ if ( rc == OSHMEM_SUCCESS ) \
74+ { \
75+ oshmem_op_t * op = oshmem_op_ ##name ##type_name ; \
76+ size_t size = nreduce * op -> dt_size ; \
77+ \
78+ /* Call collective reduce operation */ \
79+ rc = group -> g_scoll .scoll_reduce ( \
80+ group , \
81+ op , \
82+ (void * )target , \
83+ (const void * )source , \
84+ size , \
85+ pSync , \
86+ (void * )pWrk , \
87+ SCOLL_DEFAULT_ALG ); \
88+ } \
89+ \
90+ if ( !__group_cache_enabled && (rc == OSHMEM_SUCCESS ) ) \
91+ { \
92+ oshmem_proc_group_destroy (group ); \
93+ } \
94+ } \
95+ RUNTIME_CHECK_RC (rc ); \
96+ }
97+
98+ #define SHMEM_TYPE_REDUCE_OPX (name , type_name , type , prefix ) \
3699 void prefix##type_name##_##name##_to_all( type *target, \
37100 type *source, \
38101 int nreduce, \
@@ -175,25 +238,25 @@ SHMEM_TYPE_REDUCE_OP(and, _short, short, shmem)
175238SHMEM_TYPE_REDUCE_OP (and , _int , int , shmem )
176239SHMEM_TYPE_REDUCE_OP (and , _long , long , shmem )
177240SHMEM_TYPE_REDUCE_OP (and , _longlong , long long , shmem )
178- SHMEM_TYPE_REDUCE_OP (and , _int16 , int16_t , shmemx )
179- SHMEM_TYPE_REDUCE_OP (and , _int32 , int32_t , shmemx )
180- SHMEM_TYPE_REDUCE_OP (and , _int64 , int64_t , shmemx )
241+ SHMEM_TYPE_REDUCE_OPX (and , _int16 , int16_t , shmemx )
242+ SHMEM_TYPE_REDUCE_OPX (and , _int32 , int32_t , shmemx )
243+ SHMEM_TYPE_REDUCE_OPX (and , _int64 , int64_t , shmemx )
181244
182245SHMEM_TYPE_REDUCE_OP (or , _short , short , shmem )
183246SHMEM_TYPE_REDUCE_OP (or , _int , int , shmem )
184247SHMEM_TYPE_REDUCE_OP (or , _long , long , shmem )
185248SHMEM_TYPE_REDUCE_OP (or , _longlong , long long , shmem )
186- SHMEM_TYPE_REDUCE_OP (or , _int16 , int16_t , shmemx )
187- SHMEM_TYPE_REDUCE_OP (or , _int32 , int32_t , shmemx )
188- SHMEM_TYPE_REDUCE_OP (or , _int64 , int64_t , shmemx )
249+ SHMEM_TYPE_REDUCE_OPX (or , _int16 , int16_t , shmemx )
250+ SHMEM_TYPE_REDUCE_OPX (or , _int32 , int32_t , shmemx )
251+ SHMEM_TYPE_REDUCE_OPX (or , _int64 , int64_t , shmemx )
189252
190253SHMEM_TYPE_REDUCE_OP (xor , _short , short , shmem )
191254SHMEM_TYPE_REDUCE_OP (xor , _int , int , shmem )
192255SHMEM_TYPE_REDUCE_OP (xor , _long , long , shmem )
193256SHMEM_TYPE_REDUCE_OP (xor , _longlong , long long , shmem )
194- SHMEM_TYPE_REDUCE_OP (xor , _int16 , int16_t , shmemx )
195- SHMEM_TYPE_REDUCE_OP (xor , _int32 , int32_t , shmemx )
196- SHMEM_TYPE_REDUCE_OP (xor , _int64 , int64_t , shmemx )
257+ SHMEM_TYPE_REDUCE_OPX (xor , _int16 , int16_t , shmemx )
258+ SHMEM_TYPE_REDUCE_OPX (xor , _int32 , int32_t , shmemx )
259+ SHMEM_TYPE_REDUCE_OPX (xor , _int64 , int64_t , shmemx )
197260
198261SHMEM_TYPE_REDUCE_OP (max , _short , short , shmem )
199262SHMEM_TYPE_REDUCE_OP (max , _int , int , shmem )
@@ -202,9 +265,9 @@ SHMEM_TYPE_REDUCE_OP(max, _longlong, long long, shmem)
202265SHMEM_TYPE_REDUCE_OP (max , _float , float , shmem )
203266SHMEM_TYPE_REDUCE_OP (max , _double , double , shmem )
204267SHMEM_TYPE_REDUCE_OP (max , _longdouble , long double , shmem )
205- SHMEM_TYPE_REDUCE_OP (max , _int16 , int16_t , shmemx )
206- SHMEM_TYPE_REDUCE_OP (max , _int32 , int32_t , shmemx )
207- SHMEM_TYPE_REDUCE_OP (max , _int64 , int64_t , shmemx )
268+ SHMEM_TYPE_REDUCE_OPX (max , _int16 , int16_t , shmemx )
269+ SHMEM_TYPE_REDUCE_OPX (max , _int32 , int32_t , shmemx )
270+ SHMEM_TYPE_REDUCE_OPX (max , _int64 , int64_t , shmemx )
208271
209272SHMEM_TYPE_REDUCE_OP (min , _short , short , shmem )
210273SHMEM_TYPE_REDUCE_OP (min , _int , int , shmem )
@@ -213,9 +276,9 @@ SHMEM_TYPE_REDUCE_OP(min, _longlong, long long, shmem)
213276SHMEM_TYPE_REDUCE_OP (min , _float , float , shmem )
214277SHMEM_TYPE_REDUCE_OP (min , _double , double , shmem )
215278SHMEM_TYPE_REDUCE_OP (min , _longdouble , long double , shmem )
216- SHMEM_TYPE_REDUCE_OP (min , _int16 , int16_t , shmemx )
217- SHMEM_TYPE_REDUCE_OP (min , _int32 , int32_t , shmemx )
218- SHMEM_TYPE_REDUCE_OP (min , _int64 , int64_t , shmemx )
279+ SHMEM_TYPE_REDUCE_OPX (min , _int16 , int16_t , shmemx )
280+ SHMEM_TYPE_REDUCE_OPX (min , _int32 , int32_t , shmemx )
281+ SHMEM_TYPE_REDUCE_OPX (min , _int64 , int64_t , shmemx )
219282
220283SHMEM_TYPE_REDUCE_OP (sum , _short , short , shmem )
221284SHMEM_TYPE_REDUCE_OP (sum , _int , int , shmem )
@@ -226,9 +289,9 @@ SHMEM_TYPE_REDUCE_OP(sum, _double, double, shmem)
226289SHMEM_TYPE_REDUCE_OP (sum , _longdouble , long double , shmem )
227290SHMEM_TYPE_REDUCE_OP (sum , _complexf , float complex , shmem )
228291SHMEM_TYPE_REDUCE_OP (sum , _complexd , double complex , shmem )
229- SHMEM_TYPE_REDUCE_OP (sum , _int16 , int16_t , shmemx )
230- SHMEM_TYPE_REDUCE_OP (sum , _int32 , int32_t , shmemx )
231- SHMEM_TYPE_REDUCE_OP (sum , _int64 , int64_t , shmemx )
292+ SHMEM_TYPE_REDUCE_OPX (sum , _int16 , int16_t , shmemx )
293+ SHMEM_TYPE_REDUCE_OPX (sum , _int32 , int32_t , shmemx )
294+ SHMEM_TYPE_REDUCE_OPX (sum , _int64 , int64_t , shmemx )
232295
233296SHMEM_TYPE_REDUCE_OP (prod , _short , short , shmem )
234297SHMEM_TYPE_REDUCE_OP (prod , _int , int , shmem )
@@ -239,6 +302,6 @@ SHMEM_TYPE_REDUCE_OP(prod, _double, double, shmem)
239302SHMEM_TYPE_REDUCE_OP (prod , _longdouble , long double , shmem )
240303SHMEM_TYPE_REDUCE_OP (prod , _complexf , float complex , shmem )
241304SHMEM_TYPE_REDUCE_OP (prod , _complexd , double complex , shmem )
242- SHMEM_TYPE_REDUCE_OP (prod , _int16 , int16_t , shmemx )
243- SHMEM_TYPE_REDUCE_OP (prod , _int32 , int32_t , shmemx )
244- SHMEM_TYPE_REDUCE_OP (prod , _int64 , int64_t , shmemx )
305+ SHMEM_TYPE_REDUCE_OPX (prod , _int16 , int16_t , shmemx )
306+ SHMEM_TYPE_REDUCE_OPX (prod , _int32 , int32_t , shmemx )
307+ SHMEM_TYPE_REDUCE_OPX (prod , _int64 , int64_t , shmemx )
0 commit comments