/* * A Serial implementation of the Matrix-Vector multiplication * * Author: Petros Anastasiadis(panastas@cslab.ece.ntua.gr) */ #include #include #include #include #include #include "/users/guest/petyros/Training/External_Functions/matrix_op.h" #include "/users/guest/petyros/Training/External_Functions/util.h" #include "/users/guest/petyros/Training/External_Functions/input.h" int main(int argc, char **argv) { /* Initializations */ int i, j, k, n, m; int *I, *cooCol, n_z, sparse=0; double *cooVal, timer; if (argc < 2) error("Too few Arguments"); else if ( argc == 2) /* ./Program Input_File -> File Input to COO */ { if(!mtx_read(&I, &cooCol, &cooVal, &n, &m, &n_z, argv[1])) error("input and/or COO convertion failed"); sparse = 1; } else if ( argc == 3) { /*./Program N M -> Generate random NxM matrix */ n = atoi(argv[1]); m = atoi(argv[2]); } else error("Too many Arguments"); /* Allocate space */ double *x = (double *) malloc(m * sizeof(*x)); double *y = (double *) malloc(n * sizeof(*y)); double *M = (double *) malloc(n * m * sizeof(*M)); #pragma omp parallel for schedule(static) /* Initialize data for each thread in corresponding socket/cache with first-touch policy */ for( i=0 ; i