#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <yaxt.h>
#include "tests.h"
#include "ctest_common.h"
#include "test_redist_common.h"
int main(int argc, char **argv) {
int rank, size;
{
MPI_Request requests[] = {MPI_REQUEST_NULL};
int n = sizeof(requests) / sizeof(requests[0]);
check_wait_request(&request);
}
{
size_t msg_size = 1 * 1024 * 1024;
int * send_buf =
xmalloc(msg_size *
sizeof(*send_buf));
int * recv_buf =
xmalloc((
size_t)size * msg_size *
sizeof(*recv_buf));
for (size_t i = 0; i < msg_size; ++i) send_buf[i] = rank;
for (size_t i = 0; i < (size_t)size * msg_size; ++i) recv_buf[i] = -1;
int n = 2 * size;
MPI_Request requests[n];
for (int i = 0; i < size; ++i)
xt_mpi_call(MPI_Isend(send_buf, (
int)msg_size, MPI_INT, i, 0,
for (int i = 0; i < size; ++i)
(int)msg_size, MPI_INT, i, 0,
check_wait_request(&request);
bool mismatch = false;
for (int i = 0; i < size; ++i)
for (size_t j = 0; j < msg_size; ++j)
mismatch |= (recv_buf[(size_t)i * msg_size + j] != i);
if (mismatch)
PUT_ERR("recv_buf[i * msg_size + j] != i\n");
free(send_buf);
free(recv_buf);
}
{
int * send_buf =
xmalloc(1 *
sizeof(*send_buf));
int * recv_buf =
xmalloc(1 *
sizeof(*recv_buf));
void *send_bufp = send_buf, *recv_bufp = recv_buf;
send_buf[0] = rank;
recv_buf[0] = -1;
MPI_Request requests[2];
xt_mpi_call(MPI_Isend(send_buf, 1, MPI_INT, (rank + 1)%size, 0,
xt_mpi_call(MPI_Irecv(recv_buf, 1, MPI_INT, (rank - 1 + size)%size, 0,
MPI_Datatype unpack_datatype[1] = {MPI_INT};
int neigh_rank;
&recv_bufp, &send_bufp, &neigh_rank);
check_wait_request(&request);
if (neigh_rank != (rank - 1 + size)%size)
PUT_ERR("neigh_rank != (rank - 1 + size)%size after xt_request_wait\n");
}
MPI_Finalize();
return TEST_EXIT_CODE;
}
add versions of standard API functions not returning on error
void xt_initialize(MPI_Comm default_comm)
#define xt_mpi_call(call, comm)
struct Xt_request_ * Xt_request
Xt_request xt_request_msgs_new(int n, const MPI_Request requests[n], MPI_Comm comm)
Xt_request xt_request_msgs_packed_new(int n_requests, const MPI_Request requests[n_requests], MPI_Comm comm, int n_packed, int n_tmp_buffers, const MPI_Datatype datatypes[n_packed], void *packed_data[n_packed], void *tmp_buffers[n_tmp_buffers], void *unpacked_data)