From: markls Date: Fri, 26 Sep 2008 22:26:07 +0000 (+0000) Subject: minor changes to comm_split code. X-Git-Tag: v3.3~164 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/9dd8fd5b897bdd4bd61472be676722df1ffd3fd3 minor changes to comm_split code. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5944 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/smpi/smpi_mpi.c b/src/smpi/smpi_mpi.c index 7d7ccf44c7..c213d455fb 100644 --- a/src/smpi/smpi_mpi.c +++ b/src/smpi/smpi_mpi.c @@ -222,55 +222,50 @@ int SMPI_MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *comm_out) rank = comm->index_to_rank_map[index]; if (0 == rank) { - int *colors = xbt_new(int, comm->size); - int *keys = xbt_new(int, comm->size); + int *color = xbt_new(int, comm->size); + int *key = xbt_new(int, comm->size); int i, j, k; smpi_mpi_communicator_t tempcomm = NULL; int colortmp; int keycount; - int *keystmp = xbt_new(int, comm->size); - int *rankstmp = xbt_new(int, comm->size); + int *rankmap = xbt_new(int, comm->size); int tmpval; int indextmp; - colors[0] = color; - keys[0] = key; + color[0] = color; + key[0] = key; - // FIXME: not efficient + // FIXME: use scatter/gather or similar instead of individual comms for (i = 1; i < comm->size; i++) { - retval = smpi_create_request(colorkey, 2, MPI_INT, MPI_ANY_SOURCE, rank, MPI_ANY_TAG, comm, &request); + retval = smpi_create_request(colorkey, 2, MPI_INT, MPI_ANY_SOURCE, + rank, MPI_ANY_TAG, comm, &request); smpi_mpi_irecv(request); smpi_mpi_wait(request, &status); - colors[status.MPI_SOURCE] = colorkey[0]; - keys[status.MPI_SOURCE] = colorkey[1]; + color[status.MPI_SOURCE] = colorkey[0]; + key[status.MPI_SOURCE] = colorkey[1]; xbt_mallocator_release(smpi_global->request_mallocator, request); } for (i = 0; i < comm->size; i++) { - if (-1 == colors[i]) { + if (-1 == color[i]) { continue; } - colortmp = colors[i]; + colortmp = color[i]; keycount = 0; for (j = i; j < comm->size; j++) { - if(colortmp == colors[j]) { - colors[j] = -1; - keystmp[keycount] = keys[j]; - rankstmp[keycount] = j; + if(colortmp == color[j]) { + color[j] = -1; + rankmap[keycount] = j; keycount++; } } // FIXME: yes, mock me, bubble sort... for (j = 0; j < keycount; j++) { for (k = j; k < keycount - 1; k++) { - if (keystmp[k] > keystmp[k + 1]) { - tmpval = keystmp[k]; - keystmp[k] = keystmp[k + 1]; - keystmp[k + 1] = tmpval; - - tmpval = rankstmp[k]; - rankstmp[k] = rankstmp[k + 1]; - rankstmp[k + 1] = tmpval; + if (key[rankmap[k]] > key[rankmap[k + 1]]) { + tmpval = rankmap[k]; + rankmap[k] = rankmap[k + 1]; + rankmap[k + 1] = tmpval; } } } @@ -285,13 +280,13 @@ int SMPI_MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *comm_out) tempcomm->index_to_rank_map[j] = -1; } for (j = 0; j < keycount; j++) { - indextmp = comm->rank_to_index_map[rankstmp[j]]; + indextmp = comm->rank_to_index_map[rankmap[j]]; tempcomm->rank_to_index_map[j] = indextmp; tempcomm->index_to_rank_map[indextmp] = j; } for (j = 0; j < keycount; j++) { - if (rankstmp[j]) { - retval = smpi_create_request(&j, 1, MPI_INT, 0, rankstmp[j], 0, comm, &request); + if (rankmap[j]) { + retval = smpi_create_request(&j, 1, MPI_INT, 0, rankmap[j], 0, comm, &request); request->data = tempcomm; smpi_mpi_isend(request); smpi_mpi_wait(request, &status);