#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <assert.h>
#include <string.h>
#ifdef XT_NEED_MPI_ABORT_WORK_AROUND
# include <fcntl.h>
# include <sys/stat.h>
# include <sys/types.h>
#endif
#include <unistd.h>
#include <mpi.h>
#include <yaxt.h>
#define VERBOSE
#include "tests.h"
#ifndef __GNUC__
# define __attribute__(x)
#endif
static enum {
SMALL,
BIG,
} index_list_size = SMALL;
static void
parse_options(int *argc, char ***argv);
static void
xfail_abort(
MPI_Comm comm,
const char *msg,
const char *source,
int line)
typedef void (*Xt_abort_func)(
MPI_Comm comm,
const char *msg,
const char *source, int line)
extern Xt_abort_func Xt_abort;
int main(int argc, char **argv) {
int my_rank;
parse_options(&argc, &argv);
{
src_stripe.
nstrides = (index_list_size == SMALL)?7:1023;
src_stripe.start = (
Xt_int)(1 + (
Xt_int)my_rank * src_stripe.nstrides);
src_stripe.stride = 1;
dst_stripe.
nstrides = src_stripe.nstrides;
dst_stripe.start = (
Xt_int)(src_stripe.start + src_stripe.nstrides);
dst_stripe.stride = -1;
Xt_abort = xfail_abort;
}
return TEST_EXIT_CODE;
}
static void
parse_options(int *argc, char ***argv)
{
int opt;
while ((opt = getopt(*argc, *argv, "s:")) != -1) {
switch (opt) {
case 's':
if (!strcmp(optarg, "small"))
index_list_size = SMALL;
else if (!strcmp(optarg, "big"))
index_list_size = BIG;
else
{
fprintf(stderr, "Unknown data size \"%s\"\n", optarg);
exit(EXIT_FAILURE);
}
}
}
}
static void
xfail_abort(
MPI_Comm comm,
const char *msg,
const char *source,
int line)
{
fprintf(stderr, "Fatal error in %s, line %d: %s\n", source, line, msg);
#ifdef XT_NEED_MPI_ABORT_WORK_AROUND
static const char exit_msg[] = "MPI_Abort(0xdeadbeef, 3)\n";
write(STDERR_FILENO, exit_msg, sizeof (exit_msg));
#endif
MPI_Abort(comm, 3);
abort();
}
void xt_initialize(MPI_Comm default_comm)
void xt_idxlist_delete(Xt_idxlist idxlist)
Xt_idxlist xt_idxstripes_new(struct Xt_stripe const *stripes, int num_stripes)
#define xt_mpi_call(call, comm)
void xt_xmap_delete(Xt_xmap xmap)
Xt_xmap xt_xmap_all2all_new(Xt_idxlist src_idxlist, Xt_idxlist dst_idxlist, MPI_Comm comm)