5#ifndef YAC_MPI_INTERNAL_H
6#define YAC_MPI_INTERNAL_H
14#if SIZE_MAX == UINT8_MAX
15#define YAC_MPI_SIZE_T MPI_UINT8_T
16#define YAC_MPI_SIZE_T_TYPE uint8_t
17#elif SIZE_MAX == UINT16_MAX
18#define YAC_MPI_SIZE_T MPI_UINT16_T
19#define YAC_MPI_SIZE_T_TYPE uint16_t
20#elif SIZE_MAX == UINT32_MAX
21#define YAC_MPI_SIZE_T MPI_UINT32_T
22#define YAC_MPI_SIZE_T_TYPE uint32_t
23#elif SIZE_MAX == UINT64_MAX
24#define YAC_MPI_SIZE_T MPI_UINT64_T
25#define YAC_MPI_SIZE_T_TYPE uint64_t
27#error "YAC: unable to determine MPI data type for size_t"
36#define YAC_ALLTOALLV_P2P_DEC(N, T) \
37void yac_alltoallv_ ## N ## _p2p( \
38 T const * send_buffer, size_t const * sendcounts, size_t const * sdispls, \
39 T * recv_buffer, size_t const * recvcounts, size_t const * rdispls, \
40 MPI_Comm comm, char const * caller, int line); \
49#undef YAC_ALLTOALLV_P2P_DEC
52 void const *
send_buffer,
size_t const * sendcounts,
size_t const * sdispls,
53 void *
recv_buffer,
size_t const * recvcounts,
size_t const * rdispls,
54 size_t dt_size, MPI_Datatype dt, MPI_Comm comm,
55 char const * caller,
int line);
58 void const *
send_buffer,
int const * sendcounts,
int const * sdispls,
59 void *
recv_buffer,
int const * recvcounts,
int const * rdispls,
60 size_t dt_size, MPI_Datatype dt,
struct yac_group_comm group_comm);
66 const size_t * sendbuf,
size_t * recvbuf,
int count,
70 void *
buffer,
int count, MPI_Datatype datatype,
int root,
87 MPI_Datatype dt,
size_t new_size, MPI_Comm
comm);
90 int count,
size_t const * sendcounts,
size_t * recvcounts,
91 size_t * sdispls,
size_t * rdispls, MPI_Comm
comm);
94 int count,
size_t ** sendcounts,
size_t ** recvcounts,
95 size_t ** sdispls,
size_t ** rdispls, MPI_Comm
comm);
97 size_t * sendcounts,
size_t * recvcounts,
98 size_t * sdispls,
size_t * rdispls);
117 char const * caller,
char const *
string, MPI_Comm
comm,
int allow_null);
142 char const * caller,
char const *
string,
void *
buffer,
int buffer_size,
143 int * position, MPI_Comm
comm,
int allow_null);
162 void const *
buffer,
int buffer_size,
int * position, MPI_Comm
comm);
void yac_alltoallv_p2p_group(void const *send_buffer, int const *sendcounts, int const *sdispls, void *recv_buffer, int const *recvcounts, int const *rdispls, size_t dt_size, MPI_Datatype dt, struct yac_group_comm group_comm)
int yac_group_comm_get_global_rank(struct yac_group_comm group_comm)
void yac_generate_alltoallv_args(int count, size_t const *sendcounts, size_t *recvcounts, size_t *sdispls, size_t *rdispls, MPI_Comm comm)
void yac_free_comm_buffers(size_t *sendcounts, size_t *recvcounts, size_t *sdispls, size_t *rdispls)
int yac_group_comm_get_rank(struct yac_group_comm group_comm)
void yac_group_comm_split(struct yac_group_comm group_comm, int split_rank, struct yac_group_comm *local_group_comm, struct yac_group_comm *remote_group_comm)
MPI_Datatype yac_get_bounding_circle_mpi_datatype(MPI_Comm comm)
int yac_group_comm_get_global_size(struct yac_group_comm group_comm)
struct yac_group_comm yac_group_comm_new(MPI_Comm comm)
void yac_allreduce_sum_dble(double *buffer, int count, struct yac_group_comm group_comm)
void yac_get_comm_buffers(int count, size_t **sendcounts, size_t **recvcounts, size_t **sdispls, size_t **rdispls, MPI_Comm comm)
#define YAC_ALLTOALLV_P2P_DEC(N, T)
int yac_group_comm_get_size(struct yac_group_comm group_comm)
size_t yac_string_get_pack_size(char const *caller, char const *string, MPI_Comm comm, int allow_null)
Compute number of bytes required to pack a string for MPI transport.
MPI_Datatype yac_create_resized(MPI_Datatype dt, size_t new_size, MPI_Comm comm)
void yac_bcast_group(void *buffer, int count, MPI_Datatype datatype, int root, struct yac_group_comm group_comm)
char * yac_string_unpack(void const *buffer, int buffer_size, int *position, MPI_Comm comm)
Unpack a C string from a buffer packed with yac_string_pack.
void yac_allgather_size_t(const size_t *sendbuf, size_t *recvbuf, int count, struct yac_group_comm group_comm)
void yac_string_pack(char const *caller, char const *string, void *buffer, int buffer_size, int *position, MPI_Comm comm, int allow_null)
Pack a C string into a provided buffer using MPI_Pack semantics.
void yac_group_comm_delete(struct yac_group_comm group_comm)
void yac_alltoallv_p2p(void const *send_buffer, size_t const *sendcounts, size_t const *sdispls, void *recv_buffer, size_t const *recvcounts, size_t const *rdispls, size_t dt_size, MPI_Datatype dt, MPI_Comm comm, char const *caller, int line)