-/* Copyright (c) 2013-2019. The SimGrid Team.
+/* Copyright (c) 2013-2021. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include "../colls_private.hpp"
#include <algorithm>
-#define MPIR_Gather_MV2_Direct Coll_gather_ompi_basic_linear::gather
-#define MPIR_Gather_MV2_two_level_Direct Coll_gather_ompi_basic_linear::gather
-#define MPIR_Gather_intra Coll_gather_mpich::gather
+#define MPIR_Gather_MV2_Direct gather__ompi_basic_linear
+#define MPIR_Gather_MV2_two_level_Direct gather__ompi_basic_linear
+#define MPIR_Gather_intra gather__mpich
typedef int (*MV2_Gather_function_ptr) (const void *sendbuf,
int sendcnt,
MPI_Datatype sendtype,
extern MV2_Gather_function_ptr MV2_Gather_inter_leader_function;
extern MV2_Gather_function_ptr MV2_Gather_intra_node_function;
-#define TEMP_BUF_HAS_NO_DATA (0)
-#define TEMP_BUF_HAS_DATA (1)
-
+#define TEMP_BUF_HAS_NO_DATA (false)
+#define TEMP_BUF_HAS_DATA (true)
namespace simgrid{
namespace smpi{
* intra node gather function
* errflag - (out) to record errors
*/
-static int MPIR_pt_pt_intra_gather( const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, int rank,
- void *tmp_buf, int nbytes,
- int is_data_avail,
- MPI_Comm comm,
- MV2_Gather_function_ptr intra_node_fn_ptr)
+static int MPIR_pt_pt_intra_gather(const void* sendbuf, int sendcnt, MPI_Datatype sendtype, void* recvbuf, int recvcnt,
+ MPI_Datatype recvtype, int root, int rank, void* tmp_buf, int nbytes,
+ bool is_data_avail, MPI_Comm comm, MV2_Gather_function_ptr intra_node_fn_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Aint recvtype_extent = 0; /* Datatype extent */
-int Coll_gather_mvapich2_two_level::gather(const void *sendbuf,
- int sendcnt,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcnt,
- MPI_Datatype recvtype,
- int root,
- MPI_Comm comm)
+int gather__mvapich2_two_level(const void *sendbuf,
+ int sendcnt,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcnt,
+ MPI_Datatype recvtype,
+ int root,
+ MPI_Comm comm)
{
- unsigned char* leader_gather_buf = NULL;
+ unsigned char* leader_gather_buf = nullptr;
int comm_size, rank;
int local_rank, local_size;
int leader_comm_rank = -1, leader_comm_size = 0;
MPI_Aint sendtype_extent = 0, recvtype_extent = 0; /* Datatype extent */
MPI_Aint true_lb = 0, sendtype_true_extent = 0, recvtype_true_extent = 0;
MPI_Comm shmem_comm, leader_comm;
- unsigned char* tmp_buf = NULL;
+ unsigned char* tmp_buf = nullptr;
// if not set (use of the algo directly, without mvapich2 selector)
- if (MV2_Gather_intra_node_function == NULL)
- MV2_Gather_intra_node_function = Coll_gather_mpich::gather;
+ if (MV2_Gather_intra_node_function == nullptr)
+ MV2_Gather_intra_node_function = gather__mpich;
if (comm->get_leaders_comm() == MPI_COMM_NULL) {
comm->init_smp();
} else {
tmp_buf = smpi_get_tmp_sendbuffer(sendcnt * std::max(sendtype_extent, sendtype_true_extent) * local_size);
}
- if (tmp_buf == NULL) {
- mpi_errno = MPI_ERR_OTHER;
- return mpi_errno;
+ if (tmp_buf == nullptr) {
+ mpi_errno = MPI_ERR_OTHER;
+ return mpi_errno;
}
}
/*while testing mpich2 gather test, we see that
*/
if (not comm->is_uniform()) {
if (local_rank == 0) {
- int* displs = NULL;
- int* recvcnts = NULL;
+ int* displs = nullptr;
+ int* recvcnts = nullptr;
int* node_sizes;
int i = 0;
/* Node leaders have all the data. But, different nodes can have
leader_gather_buf =
smpi_get_tmp_sendbuffer(sendcnt * std::max(sendtype_extent, sendtype_true_extent) * comm_size);
}
- if (leader_gather_buf == NULL) {
+ if (leader_gather_buf == nullptr) {
mpi_errno = MPI_ERR_OTHER;
return mpi_errno;
}
recvcnts[i] = node_sizes[i] * recvcnt;
}
}
- Colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, recvbuf, recvcnts, displs, recvtype, leader_root,
+ colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, recvbuf, recvcnts, displs, recvtype, leader_root,
leader_comm);
} else {
/* The root of the gather operation is not the node leader.
recvcnts[i] = node_sizes[i] * nbytes;
}
}
- Colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, leader_gather_buf, recvcnts, displs, MPI_BYTE,
+ colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, leader_gather_buf, recvcnts, displs, MPI_BYTE,
leader_root, leader_comm);
}
if (leader_comm_rank == leader_root) {
/* The root of the Gather operation is not a node-level leader
*/
leader_gather_buf = smpi_get_tmp_sendbuffer(nbytes * comm_size);
- if (leader_gather_buf == NULL) {
- mpi_errno = MPI_ERR_OTHER;
- return mpi_errno;
+ if (leader_gather_buf == nullptr) {
+ mpi_errno = MPI_ERR_OTHER;
+ return mpi_errno;
}
}
if (root == leader_of_root) {
/* check if multiple threads are calling this collective function */
if (local_rank == 0 ) {
- if (tmp_buf != NULL) {
- smpi_free_tmp_buffer(tmp_buf);
- }
- if (leader_gather_buf != NULL) {
- smpi_free_tmp_buffer(leader_gather_buf);
- }
+ if (tmp_buf != nullptr) {
+ smpi_free_tmp_buffer(tmp_buf);
+ }
+ if (leader_gather_buf != nullptr) {
+ smpi_free_tmp_buffer(leader_gather_buf);
+ }
}
return (mpi_errno);