X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/14c4d40b625501275e7ec6eccd6f92f659316f85..cc63d7b267be4c20633a0be7db63b3d88030bee6:/src/smpi/smpi_coll.c diff --git a/src/smpi/smpi_coll.c b/src/smpi/smpi_coll.c index a2b573c178..3bca49dbb4 100644 --- a/src/smpi/smpi_coll.c +++ b/src/smpi/smpi_coll.c @@ -1,6 +1,6 @@ /* smpi_coll.c -- various optimized routing for collectives */ -/* Copyright (c) 2009, 2010. The SimGrid Team. +/* Copyright (c) 2009-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -143,7 +143,9 @@ int find_coll_description(s_mpi_coll_description_t * table, return i; } } - name_list = strdup(table[0].name); + if (!table[0].name) + xbt_die("No collective is valid! This is a bug."); + name_list = xbt_strdup(table[0].name); for (i = 1; table[i].name; i++) { name_list = xbt_realloc(name_list, @@ -151,7 +153,7 @@ int find_coll_description(s_mpi_coll_description_t * table, strcat(name_list, ", "); strcat(name_list, table[i].name); } - xbt_die("Model '%s' is invalid! Valid models are: %s.", name, name_list); + xbt_die("Collective '%s' is invalid! Valid collectives are: %s.", name, name_list); return -1; } @@ -272,6 +274,9 @@ static void tree_bcast(void *buf, int count, MPI_Datatype datatype, } smpi_mpi_startall(tree->numChildren, requests); smpi_mpi_waitall(tree->numChildren, requests, MPI_STATUS_IGNORE); + for(i = 0; i < tree->numChildren; i++) { + if(requests[i]!=MPI_REQUEST_NULL) smpi_mpi_request_free(&requests[i]); + } xbt_free(requests); } @@ -310,6 +315,9 @@ static void tree_antibcast(void *buf, int count, MPI_Datatype datatype, } smpi_mpi_startall(tree->numChildren, requests); smpi_mpi_waitall(tree->numChildren, requests, MPI_STATUS_IGNORE); + for(i = 0; i < tree->numChildren; i++) { + if(requests[i]!=MPI_REQUEST_NULL) smpi_mpi_request_free(&requests[i]); + } xbt_free(requests); } @@ -395,8 +403,8 @@ int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm alltoall_bruck() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* Local copy from self */ err = smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext, @@ -435,6 +443,9 @@ int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount, smpi_mpi_startall(count, requests); XBT_DEBUG("<%d> wait for %d requests", rank, count); smpi_mpi_waitall(count, requests, MPI_STATUS_IGNORE); + for(i = 0; i < count; i++) { + if(requests[i]!=MPI_REQUEST_NULL) smpi_mpi_request_free(&requests[i]); + } xbt_free(requests); } return MPI_SUCCESS; @@ -458,8 +469,8 @@ int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm alltoall_basic_linear() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* simple optimization */ err = smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext, sendcount, sendtype, @@ -491,6 +502,9 @@ int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount, smpi_mpi_startall(count, requests); XBT_DEBUG("<%d> wait for %d requests", rank, count); smpi_mpi_waitall(count, requests, MPI_STATUS_IGNORE); + for(i = 0; i < count; i++) { + if(requests[i]!=MPI_REQUEST_NULL) smpi_mpi_request_free(&requests[i]); + } xbt_free(requests); } return err; @@ -511,8 +525,8 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm basic_alltoallv() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* Local copy from self */ err = smpi_datatype_copy((char *)sendbuf + senddisps[rank] * sendext, @@ -553,6 +567,9 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, smpi_mpi_startall(count, requests); XBT_DEBUG("<%d> wait for %d requests", rank, count); smpi_mpi_waitall(count, requests, MPI_STATUS_IGNORE); + for(i = 0; i < count; i++) { + if(requests[i]!=MPI_REQUEST_NULL) smpi_mpi_request_free(&requests[i]); + } xbt_free(requests); } return err;