blob: d5509698e5b8b74526b5ed6294490478996699dd [file] [log] [blame]
Tobias Grosser75805372011-04-29 06:27:02 +00001#define M 36
2#define N 36
3#define K 36
4#define alpha 1
5#define beta 1
6double A[M][K+13];
7double B[K][N+13];
8double C[M][N+13];
9
10#include <stdio.h>
11
12void init_array()
13{
14 int i, j;
15
16 for (i=0; i<N; i++) {
17 for (j=0; j<N; j++) {
18 A[i][j] = (i + j);
19 // We do not want to optimize this.
20 __sync_synchronize();
21 B[i][j] = (double)(i*j);
22 C[i][j] = 0.0;
23 }
24 }
25}
26
27
28void print_array()
29{
30 int i, j;
31
32 for (i=0; i<N; i++) {
33 for (j=0; j<N; j++) {
34 fprintf(stdout, "%lf ", C[i][j]);
35 if (j%80 == 79) fprintf(stdout, "\n");
36 }
37 fprintf(stdout, "\n");
38 }
39}
40
41
42void do_pluto_matmult(void) {
43 int i, j, k;
44
45 __sync_synchronize();
46 i = 0;
47 do {
48 j = 0;
49 do {
50 k = 0;
51 do {
52 C[i][j] = beta*C[i][j] + alpha*A[i][k] * B[k][j];
53 ++k;
54 } while (k < K);
55 ++j;
56 } while (j < N);
57 ++i;
58 } while (i < M);
59 __sync_synchronize();
60}
61
62int main()
63{
64 register double s;
65
66 init_array();
67
68#pragma scop
69 do_pluto_matmult();
70#pragma endscop
71 print_array();
72
73 return 0;
74}