source: CIVL/examples/mpi/collective/reduce.c@ c2f38f1

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since c2f38f1 was 626a547, checked in by Manchun Zheng <zmanchun@…>, 11 years ago

added more test methods.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@2135 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.2 KB
RevLine 
[b12731c]1#include <mpi.h>
2#include <stdio.h>
3#ifdef _CIVL
4#include<civlc.cvh>
5#endif
6
7#define WCOMM MPI_COMM_WORLD
8
9int main(int argc, char **argv){
10 int npes, mype, ierr;
11 double sum, val; int calc, knt=1;
12 ierr = MPI_Init(&argc, &argv);
13 ierr = MPI_Comm_size(WCOMM, &npes);
14 ierr = MPI_Comm_rank(WCOMM, &mype);
15
16 val = (double)mype;
17
18#ifdef OPERATOR
19 if(mype%2)
20 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_SUM, 0, WCOMM);
21 else
22 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_MAX, 0, WCOMM);
23#elif defined ORDER
24 if(mype !== 2)
25 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_SUM, 0, WCOMM);
26#elif defined TYPE
27 if(mype%2)
28 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_SUM, 0, WCOMM);
29 else
30 ierr = MPI_Reduce(&val, &sum, knt, MPI_INT, MPI_SUM, 0, WCOMM);
31#elif defined ROOT
32 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_SUM, mype, WCOMM);
33#else
34 ierr = MPI_Reduce(&val, &sum, knt, MPI_DOUBLE, MPI_SUM, 0, WCOMM);
35#endif
36
37 calc = ((npes - 1) * npes) / 2;
38 if(mype == 0){
39 printf(" PE: %d sum=%5.0f calc=%d\n", mype, sum, calc);
40#ifdef _CIVL
[626a547]41#ifndef OPERATOR
[b12731c]42 $assert(sum == calc);
[626a547]43#endif
[b12731c]44#endif
45 }
46 ierr = MPI_Finalize();
47}
Note: See TracBrowser for help on using the repository browser.