|
Packit |
577717 |
#include <stdio.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define NUM_RUNS 3
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define MATRIX_SIZE 512
|
|
Packit |
577717 |
static double a[MATRIX_SIZE][MATRIX_SIZE];
|
|
Packit |
577717 |
static double b[MATRIX_SIZE][MATRIX_SIZE];
|
|
Packit |
577717 |
static double c[MATRIX_SIZE][MATRIX_SIZE];
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long naive_matrix_multiply_estimated_flops(int quiet) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long muls,divs,adds;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* setup */
|
|
Packit |
577717 |
muls=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
divs=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
adds=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* multiply */
|
|
Packit |
577717 |
muls+=MATRIX_SIZE*MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
adds+=MATRIX_SIZE*MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* sum */
|
|
Packit |
577717 |
adds+=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("Estimated flops: adds: %lld muls: %lld divs: %lld\n",
|
|
Packit |
577717 |
adds,muls,divs);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return adds+muls+divs;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long naive_matrix_multiply_estimated_loads(int quiet) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long loads=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* setup */
|
|
Packit |
577717 |
loads+=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* multiply */
|
|
Packit |
577717 |
loads+=MATRIX_SIZE*MATRIX_SIZE*MATRIX_SIZE*2;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* sum */
|
|
Packit |
577717 |
loads+=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("Estimated loads: %lld\n",loads);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return loads;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long naive_matrix_multiply_estimated_stores(int quiet) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long stores=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* setup */
|
|
Packit |
577717 |
stores+=MATRIX_SIZE*MATRIX_SIZE*2;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* multiply */
|
|
Packit |
577717 |
stores+=MATRIX_SIZE*MATRIX_SIZE;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* sum */
|
|
Packit |
577717 |
stores+=1;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("Estimated stores: %lld\n",stores);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return stores;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
double naive_matrix_multiply(int quiet) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
double s;
|
|
Packit |
577717 |
int i,j,k;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
for(j=0;j
|
|
Packit |
577717 |
a[i][j]=(double)i*(double)j;
|
|
Packit |
577717 |
b[i][j]=(double)i/(double)(j+5);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for(j=0;j
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
s=0;
|
|
Packit |
577717 |
for(k=0;k
|
|
Packit |
577717 |
s+=a[i][k]*b[k][j];
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
c[i][j] = s;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
s=0.0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
for(j=0;j
|
|
Packit |
577717 |
s+=c[i][j];
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) printf("Matrix multiply sum: s=%lf\n",s);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return s;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|