// single process matrix multiplication // written by ian a. mason // may 21 @ u.n.e // fake data version #include #include #include "sblock.h" #include #define VERBOSE 0 int main(int argc, char* argv[]){ int *a, *b, *c; int i, dim, row, col; int start_time = time(NULL); if((argc != 2) || ((dim = atoi(argv[1])) < 0)){ fprintf(stderr, "usage: spmm dim\n"); exit(1); } a = (int*)malloc(sizeof(int)*dim*dim); b = (int*)malloc(sizeof(int)*dim*dim); c = (int*)malloc(sizeof(int)*dim*dim); if (!(a && b && c )) { fprintf(stderr, "%s: out of memory!\n", argv[0]); free(a); free(b); free(c); }; InitBlock(a, b, c, dim); BlockMult(c,a,b,dim); for (i = 0 ; i < dim*dim; i++) if (a[i] != c[i]) printf("Error a[%d] (%d) != c[%d] (%d) \n", i, a[i],i,c[i]); if(VERBOSE){ printf("Block C\n"); for(row = 0; row < dim; row++){ for(col = 0; col < dim; col++) printf("%5d ", c[(row*dim) + col]); printf("\n"); } printf("Block A\n"); for(row = 0; row < dim; row++){ for(col = 0; col < dim; col++) printf("%5d ", a[(row*dim) + col]); printf("\n"); } } free(a); free(b); free(c); printf("Done smoothly after %ld seconds\n", time(NULL) - start_time); return 0; }