Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. void multiply_element_threaded(struct m_data *data)
  2. {
  3.     mat_data = data;
  4.     unsigned int threads_number = data->arow_size * data->bcol_size;
  5.     pthread_t element_threads[threads_number];
  6.     unsigned int counter = 0;
  7.     for (int i = 0; i < data->arow_size; i++)
  8.     {
  9.         for (int j = 0; j < data->bcol_size; j++)
  10.         {
  11.             struct state *st = create_state(i, j);
  12.             int ret = pthread_create(&element_threads[counter++], NULL, calculate_element, (void *)st);
  13.             if (ret != 0)
  14.             {
  15.                 fprintf(stderr, "Error occured while creating thread, error code = %d Thread number: %d\n", ret, counter);
  16.                 return;
  17.             }
  18.            // printf("Thread number %d is created\n", counter);
  19.         }
  20.     }
  21.     for (int i = 0; i < threads_number; i++)
  22.     {
  23.         pthread_join(element_threads[i], NULL);
  24.     }
  25.     return;
  26. }
  27.  
  28. void *calculate_element(void *ptr)
  29. {
  30.     struct state *st = (struct state *) ptr;
  31.     mat_data->matrix_o[st->curr_row][st->curr_col] = 0;
  32.     for (int i = 0; i < mat_data->acol_size; i++)
  33.     {
  34.         mat_data->matrix_o[st->curr_row][st->curr_col] += (mat_data->matrix_a[st->curr_row][i]
  35.                                                  * mat_data->matrix_b[i][st->curr_col]);
  36.     }
  37.     free(st);
  38.     //printf("Thread is finished : %d\n", cnt);
  39.  
  40.     pthread_exit(NULL);
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement