1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
4 * (C) 2015 by Argonne National Laboratory.
5 * See COPYRIGHT in top-level directory.
8 /* This test is going to test when Accumulate operation is working
16 typedef struct long_double_int {
21 int main(int argc, char *argv[])
26 long_double_int_t *orig_buf;
27 long_double_int_t *tar_buf;
28 MPI_Datatype vector_dtp;
30 MPI_Init(&argc, &argv);
32 MPI_Comm_size(MPI_COMM_WORLD, &nproc);
33 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
35 MPI_Alloc_mem(sizeof(long_double_int_t) * DATA_SIZE, MPI_INFO_NULL, &orig_buf);
36 MPI_Alloc_mem(sizeof(long_double_int_t) * DATA_SIZE, MPI_INFO_NULL, &tar_buf);
38 for (i = 0; i < DATA_SIZE; i++) {
45 MPI_Type_vector(5 /* count */ , 3 /* blocklength */ , 5 /* stride */ , MPI_LONG_DOUBLE_INT,
47 MPI_Type_commit(&vector_dtp);
49 MPI_Win_create(tar_buf, sizeof(long_double_int_t) * DATA_SIZE, sizeof(long_double_int_t),
50 MPI_INFO_NULL, MPI_COMM_WORLD, &win);
53 MPI_Win_lock(MPI_LOCK_SHARED, 1, 0, win);
54 MPI_Accumulate(orig_buf, 1, vector_dtp, 1, 0, 1, vector_dtp, MPI_MAXLOC, win);
55 MPI_Win_unlock(1, win);
61 for (i = 0; i < DATA_SIZE; i++) {
63 if (tar_buf[i].a != 1.0 || tar_buf[i].b != 1) {
68 if (tar_buf[i].a != 0.0 || tar_buf[i].b != 0) {
75 MPI_Type_free(&vector_dtp);
77 MPI_Free_mem(orig_buf);
78 MPI_Free_mem(tar_buf);
82 printf(" No Errors\n");