src/test/mpi-reduce.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    #include "utils.h"
    
    int main ()
    {
      init_grid (64);
    
      scalar s[];
      foreach()
        s[] = x + y;
    
      // statsf() uses reduction operations
      stats stat = statsf (s);
      fprintf (qerr, "%g %g %g\n", stat.min, stat.sum, stat.max);
    
      // Array reduction
      #define arr_size 10
      int cells[arr_size] = {0};
      foreach (reduction(+:cells[:arr_size])) 
        cells[(int)(10*fabs(x))]++;
    
      for (int i = 0; i < arr_size; i++) 
        fprintf (qerr, "%d ", cells[i]);
      fputc ('\n', qerr);
    
      // Coord reduction
      coord p = {0};
      foreach (reduction(+:p))
        foreach_dimension()
          p.x++;
      fprintf (qerr, "%g %g\n", p.x, p.y);
    }