/*///////////////////////////////////////////////////////////////////////////// // // File name : matvec.c // Author : DaeGon Kim // Date : 2007/11/07 // Desc : A tiled and skewed matrix vector multiplication // // Modified 2010/9/9 by Nissa Osheim to simplify it and include timing. // Removed tiling and skewing. // /////////////////////////////////////////////////////////////////////////////*/ #include #include #include #include "timer.h" #define MAX(x,y) ((x)>(y) ? (x) : (y) ) #define MIN(x,y) ((x)>(y) ? (y) : (x) ) #define A(i,j) A[(i)*M+j] #define b(i) b[i] #define c(i) c[i] int main(int argc, char **argv) { int N = 50; int M = 40; double *A, *b, *c; int size; int i, j; /* Time */ double time; if ( argc > 1 ) N = atoi(argv[1]); if ( argc > 2 ) M = atoi(argv[2]); printf("N=%d, M=%d\n", N, M); size = N * M * sizeof(double); A = (double *)malloc(size); size = N * sizeof(double); c = (double *)malloc(size); size = M * sizeof(double); b = (double *)malloc(size); /* Initialize */ for ( i=0 ; i < N ; i++ ) { for ( j=0 ; j < M ; j++ ) { A(i,j) = i + j; b(j) = 1; } } /* Start Timer */ initialize_timer (); start_timer(); /* Compute Vector */ for ( i=0 ; i < N ; i++ ) { c(i) = 0; for ( j=0; j < M ; j++ ) { c(i) += A(i,j) * b(j); } } /* stop timer */ stop_timer(); time=elapsed_time (); /* print results */ for ( i=0 ; i < N ; i++ ) { printf("c[%d] = %lf\n", i, c(i)); } printf("elapsed time = %lf\n", time); return 0; }