Advertisement
ahmad_zizo

THREADS

Apr 28th, 2015
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <pthread.h>
  5. #include <unistd.h>
  6. #include <fcntl.h>
  7. #include <string.h>
  8. #include <sys/time.h>
  9. #include <sys/wait.h>
  10. #include <sys/stat.h>
  11.  
  12. double *a,*b,*c;
  13.  
  14. int M;
  15.  
  16. void print_matrix(double *m)
  17. {
  18.     int i,j;
  19.     for(i=0; i<M; i++)
  20.     {
  21.         for(j=0; j<M; j++)
  22.         {
  23.             printf("%g\t" ,*(m+M*i+j));
  24.         }
  25.         printf("\n");
  26.     }
  27.     printf("\n");
  28. }
  29.  
  30. void calc_row(int *r)
  31. {
  32.     int row = *r;
  33.     int j,k;
  34.  
  35.     for(j=0; j<M; j++)
  36.     {
  37.         *(c+row*M+j)=0;
  38.  
  39.         for(k=0; k<M; k++)
  40.         {
  41.             *(c+row*M+j)=*(c+row*M+j)+*(a+row*M+k)* *(b+k*M+j);
  42.         }
  43.     }
  44. }
  45.  
  46. void generate_matrix(double *A)
  47. {
  48.     int i,j;
  49.     for(i=0; i<M; i++)
  50.     {
  51.         for(j=0; j<M; j++)
  52.         {
  53.             *(A+i*M+j) = 1+rand()%100;
  54.         }
  55.     }
  56. }
  57.  
  58. int main(int argc, char *argv[])
  59. {
  60.     srand(time(NULL));
  61.     if(argc != 2)
  62.     {
  63.         printf("\nERROR\n");
  64.         exit(0);
  65.     }
  66.     if(atoi(argv[1]) < 1 )
  67.     {
  68.         printf("\nERROR\n");
  69.         exit(0);
  70.     }
  71.     clock_t t1,t2;
  72.     int i;
  73.     int args[2];
  74.     M =args[1] = atoi(argv[1]);
  75.     pthread_t pthread[M];
  76.     a = (double *)malloc(M*M*sizeof(double));
  77.     b = (double *)malloc(M*M*sizeof(double));
  78.     c = (double *)malloc(M*M*sizeof(double));
  79.  
  80.     generate_matrix(a);
  81.     generate_matrix(b);
  82.  
  83.     t1 = clock();
  84.  
  85.     int idx[M];
  86.  
  87.     for(i = 0 ; i < M ; ++i)
  88.         idx[i] = i;
  89.     for(i=0 ; i< M ; i++)
  90.     {
  91.         args[0] = i;
  92.         if (pthread_create(&pthread[i], NULL, (void *) calc_row, (void *)&i /*&idx[i]*/) != 0)
  93.         {
  94.             fprintf(stderr, "pthread create thread error");
  95.             exit(1);
  96.         }
  97.         (void)pthread_join(pthread[i], NULL);
  98.     }
  99.  
  100.    
  101.     t2= clock();
  102.     print_matrix(a);
  103.     print_matrix(b);
  104.     print_matrix(c);
  105.  
  106.  
  107.     printf("\n\ntime taken = %f\n\n",(double)(t2-t1)/(CLOCKS_PER_SEC / 1000.0));
  108.  
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement