X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3928c9b3860770cd5efbaa3515e9df6d09273e52..b3b356352e87ae00a20f737c48e19b0c8413455a:/src/smpi/smpi_coll.c diff --git a/src/smpi/smpi_coll.c b/src/smpi/smpi_coll.c index 70fdb14f87..c452e2a808 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-2013. The SimGrid Team. +/* Copyright (c) 2009-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -14,6 +14,9 @@ #include "colls/colls.h" #include "simgrid/sg_config.h" +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_coll, smpi, + "Logging specific to SMPI (coll)"); + s_mpi_coll_description_t mpi_coll_gather_description[] = { {"default", "gather default collective", @@ -121,7 +124,7 @@ void coll_help(const char *category, s_mpi_coll_description_t * table) } int find_coll_description(s_mpi_coll_description_t * table, - char *name) + char *name, const char *desc) { int i; char *name_list = NULL; @@ -132,6 +135,8 @@ int find_coll_description(s_mpi_coll_description_t * table, } for (i = 0; table[i].name; i++) if (!strcmp(name, table[i].name)) { + if (strcmp(table[i].name,"default")) + XBT_INFO("Switch to algorithm %s for collective %s",table[i].name,desc); return i; } @@ -144,7 +149,7 @@ int find_coll_description(s_mpi_coll_description_t * table, } } if (!table[0].name) - xbt_die("No collective is valid! This is a bug."); + xbt_die("No collective is valid for '%s'! This is a bug.",name); name_list = xbt_strdup(table[0].name); for (i = 1; table[i].name; i++) { name_list = @@ -157,9 +162,6 @@ int find_coll_description(s_mpi_coll_description_t * table, return -1; } -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_coll, smpi, - "Logging specific to SMPI (coll)"); - int (*mpi_coll_gather_fun)(void *, int, MPI_Datatype, void*, int, MPI_Datatype, int root, MPI_Comm); int (*mpi_coll_allgather_fun)(void *, int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm); int (*mpi_coll_allgatherv_fun)(void *, int, MPI_Datatype, void*, int*, int*, MPI_Datatype, MPI_Comm); @@ -274,6 +276,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); } @@ -312,6 +317,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); } @@ -397,8 +405,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, @@ -437,6 +445,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; @@ -460,8 +471,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, @@ -493,6 +504,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; @@ -513,8 +527,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, @@ -555,6 +569,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;