PAPI 7.1.0.0
Loading...
Searching...
No Matches
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
6static double a[MATRIX_SIZE][MATRIX_SIZE];
7static double b[MATRIX_SIZE][MATRIX_SIZE];
8static 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 */
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 */
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
int i
double s
Definition: byte_profile.c:36
static double a[MATRIX_SIZE][MATRIX_SIZE]
static double b[MATRIX_SIZE][MATRIX_SIZE]
long long naive_matrix_multiply_estimated_loads(int quiet)
#define MATRIX_SIZE
double naive_matrix_multiply(int quiet)
long long naive_matrix_multiply_estimated_flops(int quiet)
static double c[MATRIX_SIZE][MATRIX_SIZE]
long long naive_matrix_multiply_estimated_stores(int quiet)
int quiet
Definition: rapl_overflow.c:19