PAPI  5.7.0.0
matrix_multiply.c
Go to the documentation of this file.
1 #include <stdio.h>
2 
3 #define NUM_RUNS 3
4 
5 #define MATRIX_SIZE 512
6 static double a[MATRIX_SIZE][MATRIX_SIZE];
7 static double b[MATRIX_SIZE][MATRIX_SIZE];
8 static double c[MATRIX_SIZE][MATRIX_SIZE];
9 
11 
12  long long muls,divs,adds;
13 
14  /* setup */
18 
19  /* multiply */
22 
23  /* sum */
25 
26  if (!quiet) {
27  printf("Estimated flops: adds: %lld muls: %lld divs: %lld\n",
28  adds,muls,divs);
29  }
30 
31  return adds+muls+divs;
32 }
33 
34 
36 
37  long long loads=0;
38 
39  /* setup */
40  loads+=0;
41 
42  /* multiply */
44 
45  /* sum */
46  loads+=MATRIX_SIZE*MATRIX_SIZE;
47 
48  if (!quiet) {
49  printf("Estimated loads: %lld\n",loads);
50  }
51 
52  return loads;
53 }
54 
56 
57  long long stores=0;
58 
59  /* setup */
60  stores+=MATRIX_SIZE*MATRIX_SIZE*2;
61 
62  /* multiply */
63  stores+=MATRIX_SIZE*MATRIX_SIZE;
64 
65  /* sum */
66  stores+=1;
67 
68  if (!quiet) {
69  printf("Estimated stores: %lld\n",stores);
70  }
71 
72  return stores;
73 }
74 
75 
77 
78  double s;
79  int i,j,k;
80 
81  for(i=0;i<MATRIX_SIZE;i++) {
82  for(j=0;j<MATRIX_SIZE;j++) {
83  a[i][j]=(double)i*(double)j;
84  b[i][j]=(double)i/(double)(j+5);
85  }
86  }
87 
88  for(j=0;j<MATRIX_SIZE;j++) {
89  for(i=0;i<MATRIX_SIZE;i++) {
90  s=0;
91  for(k=0;k<MATRIX_SIZE;k++) {
92  s+=a[i][k]*b[k][j];
93  }
94  c[i][j] = s;
95  }
96  }
97 
98  s=0.0;
99 
100  for(i=0;i<MATRIX_SIZE;i++) {
101  for(j=0;j<MATRIX_SIZE;j++) {
102  s+=c[i][j];
103  }
104  }
105 
106  if (!quiet) printf("Matrix multiply sum: s=%lf\n",s);
107 
108  return s;
109 }
110 
double naive_matrix_multiply(int quiet)
static double a[MATRIX_SIZE][MATRIX_SIZE]
static double c[MATRIX_SIZE][MATRIX_SIZE]
int quiet
Definition: rapl_overflow.c:18
#define MATRIX_SIZE
double s
Definition: byte_profile.c:36
long long naive_matrix_multiply_estimated_flops(int quiet)
static double b[MATRIX_SIZE][MATRIX_SIZE]
long long naive_matrix_multiply_estimated_loads(int quiet)
long long naive_matrix_multiply_estimated_stores(int quiet)
int i
Definition: fileop.c:140