#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
main(int
argc, char
*argv[]){
int
tid, nthreads, i, j, k,itter, chunk=500;
int
nrows=1000,ncols=1000;
time_t rawtime;
struct
tm * timeinfo;
float
** a;
float
** b;
float
** c;
a= malloc(nrows*sizeof
(float
*));
b=malloc(nrows*sizeof
(float
*));
c=malloc(nrows*sizeof
(float
*));
for
(i = 0; i < nrows;i++)
a[i] = malloc(ncols * sizeof
(float
));
for
(i = 0; i < nrows;i++)
b[i] = malloc(ncols * sizeof
(float
));
for
(i = 0; i < nrows;i++)
c[i] = malloc(ncols * sizeof
(float
));
for
(i=0; i<nrows; i++)
for
(j=0;j<ncols; j++)
a[i][j]=(float
) (3+i+0.003186*j);
for
(i=0; i<nrows; i++)
for
(j=0;j<ncols; j++)
b[i][j]=(float
) (1+0.04517*i);
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
for
(itter=0;itter<5;itter++){
#pragma omp parallel shared(a,b,c,nthreads,chunk) private(tid,i,j,k)
#pragma omp for
schedule (static, chunk)
for
(i=0; i<nrows; i++)
for
(k=0; k<ncols; k++)
for
(j=0;j<ncols; j++)
c[i][j]+=a[i][k]*b[k][j];
}time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
for
(i=0; i<5; i++){
for
(j=0;j<5; j++)
printf("%f ",c[i][j]);
printf("\n");
}
}