1616 * Copyright (c) 2012 Oak Ridge National Labs. All rights reserved.
1717 * Copyright (c) 2015 Research Organization for Information Science
1818 * and Technology (RIST). All rights reserved.
19- * Copyright (c) 2018 Triad National Security, LLC. All rights
19+ * Copyright (c) 2018-2022 Triad National Security, LLC. All rights
2020 * reserved.
2121 * $COPYRIGHT$
2222 *
@@ -71,7 +71,7 @@ opal_mutex_t ompi_group_afp_mutex = OPAL_MUTEX_STATIC_INIT;
7171/*
7272 * Allocate a new group structure
7373 */
74- ompi_group_t * ompi_group_allocate (int group_size )
74+ ompi_group_t * ompi_group_allocate (ompi_group_t * orig_group , int group_size )
7575{
7676 /* local variables */
7777 ompi_proc_t * * procs = calloc (group_size , sizeof (ompi_proc_t * ));
@@ -81,15 +81,15 @@ ompi_group_t *ompi_group_allocate(int group_size)
8181 return NULL ;
8282 }
8383
84- new_group = ompi_group_allocate_plist_w_procs (procs , group_size );
84+ new_group = ompi_group_allocate_plist_w_procs (orig_group , procs , group_size );
8585 if (NULL == new_group ) {
8686 free (procs );
8787 }
8888
8989 return new_group ;
9090}
9191
92- ompi_group_t * ompi_group_allocate_plist_w_procs (ompi_proc_t * * procs , int group_size )
92+ ompi_group_t * ompi_group_allocate_plist_w_procs (ompi_group_t * orig_group , ompi_proc_t * * procs , int group_size )
9393{
9494 /* local variables */
9595 ompi_group_t * new_group = NULL ;
@@ -121,12 +121,18 @@ ompi_group_t *ompi_group_allocate_plist_w_procs (ompi_proc_t **procs, int group_
121121 new_group -> grp_my_rank = MPI_UNDEFINED ;
122122 OMPI_GROUP_SET_DENSE (new_group );
123123
124+ if (NULL != orig_group ) {
125+ new_group -> grp_instance = orig_group -> grp_instance ;
126+ } else {
127+ new_group -> grp_instance = NULL ;
128+ }
129+
124130 ompi_group_increment_proc_count (new_group );
125131
126132 return new_group ;
127133}
128134
129- ompi_group_t * ompi_group_allocate_sporadic (int group_size )
135+ ompi_group_t * ompi_group_allocate_sporadic (ompi_group_t * orig_group , int group_size )
130136{
131137 /* local variables */
132138 ompi_group_t * new_group = NULL ;
@@ -165,13 +171,14 @@ ompi_group_t *ompi_group_allocate_sporadic(int group_size)
165171 /* initialize our rank to MPI_UNDEFINED */
166172 new_group -> grp_my_rank = MPI_UNDEFINED ;
167173 new_group -> grp_proc_pointers = NULL ;
174+ new_group -> grp_instance = orig_group -> grp_instance ;
168175 OMPI_GROUP_SET_SPORADIC (new_group );
169176
170177 error_exit :
171178 return new_group ;
172179}
173180
174- ompi_group_t * ompi_group_allocate_strided (void )
181+ ompi_group_t * ompi_group_allocate_strided (ompi_group_t * orig_group )
175182{
176183 ompi_group_t * new_group = NULL ;
177184
@@ -188,6 +195,7 @@ ompi_group_t *ompi_group_allocate_strided(void)
188195 /* initialize our rank to MPI_UNDEFINED */
189196 new_group -> grp_my_rank = MPI_UNDEFINED ;
190197 new_group -> grp_proc_pointers = NULL ;
198+ new_group -> grp_instance = orig_group -> grp_instance ;
191199 OMPI_GROUP_SET_STRIDED (new_group );
192200 new_group -> sparse_data .grp_strided .grp_strided_stride = -1 ;
193201 new_group -> sparse_data .grp_strided .grp_strided_offset = -1 ;
@@ -196,9 +204,13 @@ ompi_group_t *ompi_group_allocate_strided(void)
196204 /* return */
197205 return new_group ;
198206}
199- ompi_group_t * ompi_group_allocate_bmap (int orig_group_size , int group_size )
207+
208+ ompi_group_t * ompi_group_allocate_bmap (ompi_group_t * orig_group , int group_size )
200209{
201210 ompi_group_t * new_group = NULL ;
211+ int orig_group_size ;
212+
213+ orig_group_size = orig_group -> grp_proc_count ;
202214
203215 assert (group_size >= 0 );
204216
@@ -224,6 +236,7 @@ ompi_group_t *ompi_group_allocate_bmap(int orig_group_size , int group_size)
224236 /* initialize our rank to MPI_UNDEFINED */
225237 new_group -> grp_my_rank = MPI_UNDEFINED ;
226238 new_group -> grp_proc_pointers = NULL ;
239+ new_group -> grp_instance = orig_group -> grp_instance ;
227240 OMPI_GROUP_SET_BITMAP (new_group );
228241
229242 error_exit :
0 commit comments