|
Packit Service |
c5cf8c |
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
|
Packit Service |
c5cf8c |
/*
|
|
Packit Service |
c5cf8c |
* (C) 2001 by Argonne National Laboratory.
|
|
Packit Service |
c5cf8c |
* See COPYRIGHT in top-level directory.
|
|
Packit Service |
c5cf8c |
*/
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#include <stdio.h>
|
|
Packit Service |
c5cf8c |
#include "mpi.h"
|
|
Packit Service |
c5cf8c |
#include "mpitest.h"
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#define TABLE_SIZE 2
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int main(int argc, char **argv)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
int rank, size;
|
|
Packit Service |
c5cf8c |
double a[TABLE_SIZE];
|
|
Packit Service |
c5cf8c |
struct {
|
|
Packit Service |
c5cf8c |
double a;
|
|
Packit Service |
c5cf8c |
int b;
|
|
Packit Service |
c5cf8c |
} in[TABLE_SIZE], out[TABLE_SIZE];
|
|
Packit Service |
c5cf8c |
int i;
|
|
Packit Service |
c5cf8c |
int errors = 0, toterrors;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Initialize the environment and some variables */
|
|
Packit Service |
c5cf8c |
MTest_Init(&argc, &argv);
|
|
Packit Service |
c5cf8c |
MPI_Comm_rank(MPI_COMM_WORLD, &rank;;
|
|
Packit Service |
c5cf8c |
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Initialize the maxloc data */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
a[i] = 0;
|
|
Packit Service |
c5cf8c |
for (i = rank; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
a[i] = (double) rank + 1.0;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Copy data to the "in" buffer */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++) {
|
|
Packit Service |
c5cf8c |
in[i].a = a[i];
|
|
Packit Service |
c5cf8c |
in[i].b = rank;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Reduce it! */
|
|
Packit Service |
c5cf8c |
MPI_Reduce(in, out, TABLE_SIZE, MPI_DOUBLE_INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
|
|
Packit Service |
c5cf8c |
MPI_Bcast(out, TABLE_SIZE, MPI_DOUBLE_INT, 0, MPI_COMM_WORLD);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Check to see that we got the right answers */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
if (i % size == rank)
|
|
Packit Service |
c5cf8c |
if (out[i].b != rank) {
|
|
Packit Service |
c5cf8c |
printf("MAX (ranks[%d] = %d != %d\n", i, out[i].b, rank);
|
|
Packit Service |
c5cf8c |
errors++;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Initialize the minloc data */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
a[i] = 0;
|
|
Packit Service |
c5cf8c |
for (i = rank; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
a[i] = -(double) rank - 1.0;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Copy data to the "in" buffer */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++) {
|
|
Packit Service |
c5cf8c |
in[i].a = a[i];
|
|
Packit Service |
c5cf8c |
in[i].b = rank;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Reduce it! */
|
|
Packit Service |
c5cf8c |
MPI_Allreduce(in, out, TABLE_SIZE, MPI_DOUBLE_INT, MPI_MINLOC, MPI_COMM_WORLD);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Check to see that we got the right answers */
|
|
Packit Service |
c5cf8c |
for (i = 0; i < TABLE_SIZE; i++)
|
|
Packit Service |
c5cf8c |
if (i % size == rank)
|
|
Packit Service |
c5cf8c |
if (out[i].b != rank) {
|
|
Packit Service |
c5cf8c |
printf("MIN (ranks[%d] = %d != %d\n", i, out[i].b, rank);
|
|
Packit Service |
c5cf8c |
errors++;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Finish up! */
|
|
Packit Service |
c5cf8c |
MTest_Finalize(errors);
|
|
Packit Service |
c5cf8c |
return MTestReturnValue(errors);
|
|
Packit Service |
c5cf8c |
}
|