-/* Copyright (c) 2013-2017. The SimGrid Team.
+/* Copyright (c) 2013-2022. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
extern int mv2_bcast_two_level_system_size;
#define INTRA_NODE_ROOT 0
-#define MPIR_Pipelined_Bcast_Zcpy_MV2 Coll_bcast_mpich::bcast
-#define MPIR_Pipelined_Bcast_MV2 Coll_bcast_mpich::bcast
-#define MPIR_Bcast_binomial_MV2 Coll_bcast_binomial_tree::bcast
-#define MPIR_Bcast_scatter_ring_allgather_shm_MV2 Coll_bcast_scatter_LR_allgather::bcast
-#define MPIR_Bcast_scatter_doubling_allgather_MV2 Coll_bcast_scatter_rdb_allgather::bcast
-#define MPIR_Bcast_scatter_ring_allgather_MV2 Coll_bcast_scatter_LR_allgather::bcast
-#define MPIR_Shmem_Bcast_MV2 Coll_bcast_mpich::bcast
-#define MPIR_Bcast_tune_inter_node_helper_MV2 Coll_bcast_mvapich2_inter_node::bcast
-#define MPIR_Bcast_inter_node_helper_MV2 Coll_bcast_mvapich2_inter_node::bcast
-#define MPIR_Knomial_Bcast_intra_node_MV2 Coll_bcast_mvapich2_knomial_intra_node::bcast
-#define MPIR_Bcast_intra_MV2 Coll_bcast_mvapich2_intra_node::bcast
+#define MPIR_Pipelined_Bcast_Zcpy_MV2 bcast__mpich
+#define MPIR_Pipelined_Bcast_MV2 bcast__mpich
+#define MPIR_Bcast_binomial_MV2 bcast__binomial_tree
+#define MPIR_Bcast_scatter_ring_allgather_shm_MV2 bcast__scatter_LR_allgather
+#define MPIR_Bcast_scatter_doubling_allgather_MV2 bcast__scatter_rdb_allgather
+#define MPIR_Bcast_scatter_ring_allgather_MV2 bcast__scatter_LR_allgather
+#define MPIR_Shmem_Bcast_MV2 bcast__mpich
+#define MPIR_Bcast_tune_inter_node_helper_MV2 bcast__mvapich2_inter_node
+#define MPIR_Bcast_inter_node_helper_MV2 bcast__mvapich2_inter_node
+#define MPIR_Knomial_Bcast_intra_node_MV2 bcast__mvapich2_knomial_intra_node
+#define MPIR_Bcast_intra_MV2 bcast__mvapich2_intra_node
extern int zcpy_knomial_factor;
extern int mv2_pipelined_zcpy_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,
- int root,
- MPI_Comm comm)
+namespace simgrid {
+namespace smpi {
+int bcast__mvapich2_inter_node(void *buffer,
+ int count,
+ MPI_Datatype datatype,
+ int root,
+ MPI_Comm comm)
{
int rank;
int mpi_errno = MPI_SUCCESS;
rank = comm->rank();
//comm_size = comm->size();
-
- if (MV2_Bcast_function==NULL){
- MV2_Bcast_function=Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_function == nullptr) {
+ MV2_Bcast_function = bcast__mpich;
}
- if (MV2_Bcast_intra_node_function==NULL){
- MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_intra_node_function == nullptr) {
+ MV2_Bcast_intra_node_function = bcast__mpich;
}
if(comm->get_leaders_comm()==MPI_COMM_NULL){
}
-int Coll_bcast_mvapich2_knomial_intra_node::bcast(void *buffer,
- int count,
- MPI_Datatype datatype,
- int root, MPI_Comm comm)
+int bcast__mvapich2_knomial_intra_node(void *buffer,
+ int count,
+ MPI_Datatype datatype,
+ int root, MPI_Comm comm)
{
int local_size = 0, rank;
int mpi_errno = MPI_SUCCESS;
- MPI_Request *reqarray = NULL;
- MPI_Status *starray = NULL;
int src, dst, mask, relative_rank;
int k;
- if (MV2_Bcast_function==NULL){
- MV2_Bcast_function=Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_function == nullptr) {
+ MV2_Bcast_function = bcast__mpich;
}
- if (MV2_Bcast_intra_node_function==NULL){
- MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_intra_node_function == nullptr) {
+ MV2_Bcast_intra_node_function = bcast__mpich;
}
if(comm->get_leaders_comm()==MPI_COMM_NULL){
local_size = comm->size();
rank = comm->rank();
+ auto* reqarray = new MPI_Request[2 * mv2_intra_node_knomial_factor];
- reqarray=(MPI_Request *)xbt_malloc(2 * mv2_intra_node_knomial_factor * sizeof (MPI_Request));
-
- starray=(MPI_Status *)xbt_malloc(2 * mv2_intra_node_knomial_factor * sizeof (MPI_Status));
+ auto* starray = new MPI_Status[2 * mv2_intra_node_knomial_factor];
/* intra-node k-nomial bcast */
if (local_size > 1) {
mask /= mv2_intra_node_knomial_factor;
}
}
- xbt_free(reqarray);
- xbt_free(starray);
+ delete[] reqarray;
+ delete[] starray;
return mpi_errno;
}
-int Coll_bcast_mvapich2_intra_node::bcast(void *buffer,
- int count,
- MPI_Datatype datatype,
- int root, MPI_Comm comm)
+int bcast__mvapich2_intra_node(void *buffer,
+ int count,
+ MPI_Datatype datatype,
+ int root, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
int comm_size;
- int two_level_bcast = 1;
+ bool two_level_bcast = true;
size_t nbytes = 0;
- int is_homogeneous, is_contig;
+ bool is_homogeneous, is_contig;
MPI_Aint type_size;
- void *tmp_buf = NULL;
+ unsigned char* tmp_buf = nullptr;
MPI_Comm shmem_comm;
if (count == 0)
return MPI_SUCCESS;
- if (MV2_Bcast_function==NULL){
- MV2_Bcast_function=Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_function == nullptr) {
+ MV2_Bcast_function = bcast__mpich;
}
- if (MV2_Bcast_intra_node_function==NULL){
- MV2_Bcast_intra_node_function= Coll_bcast_mpich::bcast;
+ if (MV2_Bcast_intra_node_function == nullptr) {
+ MV2_Bcast_intra_node_function = bcast__mpich;
}
if(comm->get_leaders_comm()==MPI_COMM_NULL){
// rank = comm->rank();
/*
if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN)*/
- is_contig = 1;
+ is_contig = true;
/* else {
MPID_Datatype_get_ptr(datatype, dtp);
is_contig = dtp->is_contig;
}
*/
- is_homogeneous = 1;
+ is_homogeneous = true;
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
- is_homogeneous = 0;
+ is_homogeneous = false;
#endif
/* MPI_Type_size() might not give the accurate size of the packed
nbytes = (size_t) (count) * (type_size);
if (comm_size <= mv2_bcast_two_level_system_size) {
if (nbytes > mv2_bcast_short_msg && nbytes < mv2_bcast_large_msg) {
- two_level_bcast = 1;
+ two_level_bcast = true;
} else {
- two_level_bcast = 0;
+ two_level_bcast = false;
}
}
- if (two_level_bcast == 1
+ if (two_level_bcast
#if defined(_MCST_SUPPORT_)
|| comm_ptr->ch.is_mcast_ok
#endif
) {
if (not is_contig || not is_homogeneous) {
- tmp_buf = (void*)smpi_get_tmp_sendbuffer(nbytes);
+ tmp_buf = smpi_get_tmp_sendbuffer(nbytes);
/* TODO: Pipeline the packing and communication */
// position = 0;