From: Augustin Degomme Date: Tue, 2 Jul 2013 16:15:06 +0000 (+0200) Subject: better handling of loop endings X-Git-Tag: v3_9_90~208 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/2d982ca14966f43a6678859d21fa7e796e8aa32f better handling of loop endings The upper bound may not be inside the set, or the stride can be negative, with upper bound < lower bound --- diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 8765cf70f2..c35b8210dd 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -588,26 +588,41 @@ int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], size = 0; for (i = 0; i < n; i++) { for (rank = ranges[i][0]; /* First */ - rank >= 0 && rank <= ranges[i][1]; /* Last */ - rank += ranges[i][2] /* Stride */ ) { + rank >= 0; /* Last */ + ) { size++; + + rank += ranges[i][2]; /* Stride */ + if (ranges[i][0] ranges[i][1]) + break; + }else{ + if(rank < ranges[i][1]) + break; + } } } - if (size == smpi_group_size(group)) { - *newgroup = group; - } else { + *newgroup = smpi_group_new(size); j = 0; for (i = 0; i < n; i++) { for (rank = ranges[i][0]; /* First */ - rank >= 0 && rank <= ranges[i][1]; /* Last */ - rank += ranges[i][2] /* Stride */ ) { + rank >= 0; /* Last */ + ) { index = smpi_group_index(group, rank); smpi_group_set_mapping(*newgroup, index, j); j++; + rank += ranges[i][2]; /* Stride */ + if (ranges[i][0] ranges[i][1]) + break; + }else{ + if(rank < ranges[i][1]) + break; + } } } - } + //} } smpi_group_use(*newgroup); retval = MPI_SUCCESS;