src/test/gpu-reduce.c
Reductions on GPUs
#include "utils.h"
int main (int argc, char * argv[])
{
init_grid (argc > 1 ? atoi(argv[1]) : 1024);
periodic (right);
periodic (top);
size (2.*pi);
scalar s[];
foreach (serial)
s[] = sq (cos(2.*x)*cos(2.*y));
timer t = timer_start();
double sum;
int iter;
for (iter = 0; iter < 400*1024/N; iter++) {
sum = 0.;
foreach(reduction(max:sum))
sum = max (sum, s[]);
}
double elapsed = timer_elapsed (t);
printf ("N: %d elapsed: %g speed: %g\n",
N, elapsed, grid->tn*iter/elapsed);
fprintf (stderr, "result: %g\n", sum);
output_ppm (s, file = "s.png", n = 512, spread = -1);
Check that “inout” fields work.