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