X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b7ed19dfcc221d7b3eca182abb5c4a3946671172..1fc042e8bc9c51f9267fa1936deaebe59ae01ee7:/src/smpi/colls/bcast/bcast-mvapich-smp.cpp diff --git a/src/smpi/colls/bcast/bcast-mvapich-smp.cpp b/src/smpi/colls/bcast/bcast-mvapich-smp.cpp index 73e5f60d61..17e9ca041d 100644 --- a/src/smpi/colls/bcast/bcast-mvapich-smp.cpp +++ b/src/smpi/colls/bcast/bcast-mvapich-smp.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2014. The SimGrid Team. +/* Copyright (c) 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -34,15 +34,15 @@ * (C) 2001 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. */ -#include "../colls_private.h" +#include "../colls_private.hpp" extern int (*MV2_Bcast_function) (void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm_ptr); extern int (*MV2_Bcast_intra_node_function) (void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm_ptr); - + extern int zcpy_knomial_factor; extern int mv2_pipelined_zcpy_knomial_factor; extern int bcast_segment_size; @@ -73,6 +73,8 @@ extern int mv2_intra_node_knomial_factor; #define mv2_bcast_large_msg 512*1024 #define mv2_knomial_intra_node_threshold 131072 #define mv2_scatter_rd_inter_leader_bcast 1 +namespace simgrid{ +namespace smpi{ int Coll_bcast_mvapich2_inter_node::bcast(void *buffer, int count, MPI_Datatype datatype, @@ -93,15 +95,15 @@ int Coll_bcast_mvapich2_inter_node::bcast(void *buffer, if (MV2_Bcast_function==NULL){ MV2_Bcast_function=Coll_bcast_mpich::bcast; } - + if (MV2_Bcast_intra_node_function==NULL){ MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast; } - + if(comm->get_leaders_comm()==MPI_COMM_NULL){ comm->init_smp(); } - + shmem_comm = comm->get_intra_comm(); local_rank = shmem_comm->rank(); local_size = shmem_comm->size(); @@ -115,8 +117,8 @@ int Coll_bcast_mvapich2_inter_node::bcast(void *buffer, int* leaders_map = comm->get_leaders_map(); leader_of_root = comm->group()->rank(leaders_map[root]); leader_root = leader_comm->group()->rank(leaders_map[root]); - - + + if (local_size > 1) { if ((local_rank == 0) && (root != rank) && (leader_root == global_rank)) { Request::recv(buffer, count, datatype, root, @@ -182,15 +184,15 @@ int Coll_bcast_mvapich2_knomial_intra_node::bcast(void *buffer, if (MV2_Bcast_function==NULL){ MV2_Bcast_function=Coll_bcast_mpich::bcast; } - + if (MV2_Bcast_intra_node_function==NULL){ MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast; } - + if(comm->get_leaders_comm()==MPI_COMM_NULL){ comm->init_smp(); } - + local_size = comm->size(); rank = comm->rank(); @@ -252,7 +254,7 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer, int mpi_errno = MPI_SUCCESS; int comm_size; int two_level_bcast = 1; - size_t nbytes = 0; + size_t nbytes = 0; int is_homogeneous, is_contig; MPI_Aint type_size; void *tmp_buf = NULL; @@ -263,15 +265,15 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer, if (MV2_Bcast_function==NULL){ MV2_Bcast_function=Coll_bcast_mpich::bcast; } - + if (MV2_Bcast_intra_node_function==NULL){ MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast; } - + if(comm->get_leaders_comm()==MPI_COMM_NULL){ comm->init_smp(); } - + comm_size = comm->size(); // rank = comm->rank(); /* @@ -316,24 +318,22 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer, #endif ) { - if (!is_contig || !is_homogeneous) { - tmp_buf=(void *)smpi_get_tmp_sendbuffer(nbytes); - - /* TODO: Pipeline the packing and communication */ - // position = 0; -/* if (rank == root) {*/ -/* mpi_errno =*/ -/* MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/ -/* if (mpi_errno)*/ -/* MPIU_ERR_POP(mpi_errno);*/ -/* }*/ + if (not is_contig || not is_homogeneous) { + tmp_buf = (void*)smpi_get_tmp_sendbuffer(nbytes); + + /* TODO: Pipeline the packing and communication */ + // position = 0; + /* if (rank == root) {*/ + /* mpi_errno =*/ + /* MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/ + /* if (mpi_errno)*/ + /* MPIU_ERR_POP(mpi_errno);*/ + /* }*/ } shmem_comm = comm->get_intra_comm(); - if (!is_contig || !is_homogeneous) { - mpi_errno = - MPIR_Bcast_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE, - root, comm); + if (not is_contig || not is_homogeneous) { + mpi_errno = MPIR_Bcast_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE, root, comm); } else { mpi_errno = MPIR_Bcast_inter_node_helper_MV2(buffer, count, datatype, root, @@ -342,20 +342,15 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer, /* We are now done with the inter-node phase */ if (nbytes <= mv2_knomial_intra_node_threshold) { - if (!is_contig || !is_homogeneous) { - mpi_errno = MPIR_Shmem_Bcast_MV2(tmp_buf, nbytes, MPI_BYTE, - root, shmem_comm); + if (not is_contig || not is_homogeneous) { + mpi_errno = MPIR_Shmem_Bcast_MV2(tmp_buf, nbytes, MPI_BYTE, root, shmem_comm); } else { mpi_errno = MPIR_Shmem_Bcast_MV2(buffer, count, datatype, root, shmem_comm); } } else { - if (!is_contig || !is_homogeneous) { - mpi_errno = - MPIR_Knomial_Bcast_intra_node_MV2(tmp_buf, nbytes, - MPI_BYTE, - INTRA_NODE_ROOT, - shmem_comm); + if (not is_contig || not is_homogeneous) { + mpi_errno = MPIR_Knomial_Bcast_intra_node_MV2(tmp_buf, nbytes, MPI_BYTE, INTRA_NODE_ROOT, shmem_comm); } else { mpi_errno = MPIR_Knomial_Bcast_intra_node_MV2(buffer, count, @@ -388,3 +383,6 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer, return mpi_errno; } + +} +}