#include "main.h" //====================================================================== inline static double getTime(void) // time in seconds { struct timeval tv; gettimeofday(&tv,(struct timezone *)0); return tv.tv_sec+1e-6*tv.tv_usec; } //====================================================================== typedef struct _ThreadInfo { pthread_t th; int size,nbThreads; double *A,*B,*C; int index; } ThreadInfo; void *task2(void *data) { ThreadInfo *info=(ThreadInfo *)data; for(int i=info->index;isize*info->size;i+=info->nbThreads) { int row=i/info->size; int column=i-(row*info->size); double sum=0.0; for(int k=0;ksize;++k) { sum+=info->A[row*info->size+k]*info->B[k*info->size+column]; } info->C[i]=sum; } return (void *)0; } //====================================================================== // MAIN //====================================================================== int main(int argc, char **argv) { int ok; int i,size,nbThreads; if((argc!=3)||(sscanf(argv[1],"%d",&size)!=1)||(sscanf(argv[2],"%d",&nbThreads)!=1)) { fprintf(stderr,"usage: %s size nb_threads\n",argv[0]); exit(1); } double *A=(double *)malloc(size*size*sizeof(double)); double *B=(double *)malloc(size*size*sizeof(double)); double *C=(double *)malloc(size*size*sizeof(double)); srand(time((time_t *)0)); for(i=0;i