]> git.somenet.org - pub/astra/parallel.git/blob - openmp/prefix/algorithm_1.c
algorithm1 implemented
[pub/astra/parallel.git] / openmp / prefix / algorithm_1.c
1 /*
2  * Recursive parallel prefix with auxiliary array y
3  */
4 #include "algorithm_1.h"
5
6 void algorithm_1 (numtype x[], int n, int ops[]) {
7         int i;
8         numtype y[n/2];
9         if (n == 1) {
10                 return;
11         }
12
13         for (i=0; i < (n/2); i++) {
14                 y[i] = x[2*i] + x[2*i+1];
15         }
16
17         algorithm_1(y, n/2, ops);
18
19         x[1] = y[0];
20
21         for (i = 1; i < (n/2); i++){
22                 x[2*i] = y[i-1] + x[2*i];
23                 x[2*i+1] = y[i];
24         }
25         if ((n%2)==1) {
26                 x[n-1] = y[n/2-1] + x[n-1];
27         }
28 }