#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <assert.h>
#include <stdlib.h>
#include <mpi.h>
#include <yaxt.h>
#include "tests.h"
#include "test_redist_common.h"
int main(int argc, char **argv) {
int rank, size;
Xt_config config = redist_exchanger_option(&argc, &argv);
{
enum { nsend = sizeof(send_msgs) / sizeof(send_msgs[0]) };
enum { nrecv = sizeof(recv_msgs) / sizeof(recv_msgs[0]) };
double src_data[1];
enum { num_dst_values = 1 };
double ref_dst_data[num_dst_values];
double dst_data[num_dst_values];
ref_dst_data[0] = (
rank + size - 1)%size;
test_redist_single_array_base(nsend, send_msgs, nrecv, recv_msgs,
src_data, num_dst_values, dst_data,
fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE, comm, config);
}
{
int nsend = size;
int nrecv = size;
=
xmalloc((
size_t)nsend *
sizeof(*send_msgs));
=
xmalloc((
size_t)nrecv *
sizeof(*recv_msgs));
for (int i = 0; i < nsend; ++i) {
}
for (int i = 0; i < nrecv; ++i) {
1, 1, &i, MPI_DOUBLE, &(recv_msgs[i].
datatype)), comm);
}
double src_data[1];
double *ref_dst_data =
xmalloc((
size_t)size *
sizeof(*ref_dst_data));
double *dst_data =
xmalloc((
size_t)size *
sizeof(*dst_data));
for (int i = 0; i < size; ++i) ref_dst_data[i] = i;
test_redist_single_array_base(nsend, send_msgs, nrecv, recv_msgs,
src_data, (size_t)size, dst_data,
fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE, comm, config);
free(dst_data);
free(ref_dst_data);
for (int i = 0; i < nrecv; ++i)
free(recv_msgs);
free(send_msgs);
}
{
int nsend = (
rank == 0)?(size):(0);
int nrecv = 1;
=
xmalloc((
size_t)nsend *
sizeof(*send_msgs));
for (int i = 0; i < nsend; ++i) {
1, 1, &i, MPI_DOUBLE, &(send_msgs[i].
datatype)), comm);
}
}
double *src_data =
xmalloc((
size_t)nsend *
sizeof(*src_data));
enum { num_dst_values = 1 };
double ref_dst_data[num_dst_values];
double dst_data[num_dst_values];
if (
rank == 0)
for (
int i = 0; i < size; ++i) src_data[i] = i;
test_redist_single_array_base(nsend, send_msgs, nrecv, recv_msgs,
src_data, num_dst_values, dst_data,
fill_array_double, NULL, ref_dst_data,
MPI_DOUBLE, MPI_DOUBLE, comm, config);
free(src_data);
for (int i = 0; i < nsend; ++i)
free(send_msgs);
}
return TEST_EXIT_CODE;
}
add versions of standard API functions not returning on error
void xt_config_delete(Xt_config config)
void xt_initialize(MPI_Comm default_comm)
#define xt_mpi_call(call, comm)