/*************************************************************************************************** * FILE : mat-mat-mul-mmap-dgemm-native.c * * AUTHOR : K V SRINATH * * INPUT : Matrix Size * * OUTPUT : Time Elapsed to compute matrix multiplication using mmap * * CREATED : August,2013 * * EMAIL : srinathkv@cdac.in hpcfte@cdac.in * ***************************************************************************************************/ #include #include #include #include #include #include #include #include #include #include int k=0; double alpha=1.0; double beta=0.0; void fill_matrix(char *name,int size) { int i,j; double val; FILE *fx=fopen(name,"wb"); if(fx<0) { perror("file open error\n"); exit(EXIT_FAILURE); } for(i=0;i\n"); exit(1); } size=atoi(argv[1]); fill_matrix("./data/Matrix_A",size); fill_matrix("./data/Matrix_B",size); fill_zeroes("./data/Matrix_R",size); //printf("Matrix A values are\n"); //print_matrix("./data/Matrix_A",size); //printf("Matrix B values are\n"); //print_matrix("./data/Matrix_B",size); //transpose("./data/Matrix_B","./data/Matrix_Bt",size); //printf("Matrix Bt values are\n"); //print_matrix("./data/Matrix_Bt",size); int fa=open("./data/Matrix_A",O_RDONLY); int fb=open("./data/Matrix_B",O_RDONLY); int fbt=open("./data/Matrix_Bt",O_RDONLY); int fr=open("./data/Matrix_R",O_RDWR); mapA=(double *)mapFile(fa,size*size*sizeof(double),0,0); mapB=(double *)mapFile(fb,size*size*sizeof(double),0,0); mapR=(double *)mapFile(fr,size*size*sizeof(double),0,1); gettimeofday(&start,NULL); call_dgemm(mapA,mapB,mapR,size); gettimeofday(&end,NULL); timeElapsed=time_elapsed(start,end); printf("Time Elapsed using DGEMM method = %lf\n",timeElapsed); printf("GFLOPS = %lf\n",((2.0*size*size*size)/(timeElapsed))/1E9); munmap(mapA,size*size*sizeof(double)); munmap(mapB,size*size*sizeof(double)); munmap(mapR,size*size*sizeof(double)); //print_matrix("./data/Matrix_R",size); close(fa); close(fb); close(fr); return 0; }