Commit c059963a authored by Xin Zhao's avatar Xin Zhao Committed by Pavan Balaji
Browse files

Add an RMA test for issuing large ACC following by small ACCs.



This test is mainly checking if the ordering between ACCs is
guaranteed.
Signed-off-by: default avatarAntonio Pena Monferrer <apenya@mcs.anl.gov>
parent 333b06cf
......@@ -157,7 +157,8 @@ noinst_PROGRAMS = \
acc-pairtype \
manyget \
derived-acc-flush_local\
large-acc-flush_local
large-acc-flush_local \
large-small-acc
if BUILD_MPIX_TESTS
noinst_PROGRAMS += aint
......
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
* (C) 2015 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
/* This code tests the case when a large ACC is issued, and then
* several small ACCs is issued between the same origin and target.
* The purpose of this test is to check if the ordering of ACCs
* is guaranteed. */
#include "mpi.h"
#include <stdio.h>
#include <stdint.h>
#define LOOP 5
#define DATA_COUNT 8192
int main(int argc, char *argv[]){
int rank, nprocs;
MPI_Win win;
uint64_t buf[DATA_COUNT], orig_buf[DATA_COUNT];
uint64_t small_orig_buf_1 = 2, small_orig_buf_2[2] = {3, 3};
int i, j, error = 0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
for (j = 0; j < LOOP; j++) {
error = 0;
for (i = 0; i < DATA_COUNT; i++) {
buf[i] = 0;
orig_buf[i] = 1;
}
MPI_Win_create(buf, sizeof(uint64_t)*DATA_COUNT, sizeof(uint64_t),
MPI_INFO_NULL, MPI_COMM_WORLD, &win);
MPI_Win_fence(0, win);
if (rank == 0) {
/* ACC (atomic PUT) to win_buf[0...DATA_COUNT-1] */
MPI_Accumulate(orig_buf, DATA_COUNT, MPI_UINT64_T, 1, 0, DATA_COUNT, MPI_UINT64_T, MPI_REPLACE, win);
/* ACC (atomic PUT) to win_buf[0] */
MPI_Accumulate(&small_orig_buf_1, 1, MPI_UINT64_T, 1, 0, 1, MPI_UINT64_T, MPI_REPLACE, win);
/* ACC (atomic PUT) to win_buf[1,2] */
MPI_Accumulate(&small_orig_buf_2, 2, MPI_UINT64_T, 1, 1, 2, MPI_UINT64_T, MPI_REPLACE, win);
}
MPI_Win_fence(0, win);
if (rank == 1) {
for (i = 0; i < DATA_COUNT; i++) {
if (i == 0) {
if (buf[i] != 2) {
error++;
}
}
else if (i == 1 || i == 2) {
if (buf[i] != 3) {
error++;
}
}
else {
if (buf[i] != 1) {
error++;
}
}
}
}
MPI_Win_free(&win);
}
if (rank == 1 && error == 0) {
printf(" No Errors\n");
}
MPI_Finalize();
}
......@@ -146,6 +146,7 @@ acc-pairtype 2
manyget 2
derived-acc-flush_local 3 mpiversion=3.0
large-acc-flush_local 3 mpiversion=3.0
large-small-acc 2
## This test is not strictly correct. This was meant to test out the
## case when MPI_Test is not nonblocking. However, we ended up
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment