Multiply matrices using threads

  • Thread starter Thread starter cs23
  • Start date Start date
  • Tags Tags
    Matrices Threads
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
1 reply · 2K views
cs23
Messages
64
Reaction score
0

Homework Statement


In my main function i am filling 2 matrices. Matrix A is 18x16 and MatrixB is 16x18. Then i am multiplying them in my thread function using an array of threads. However, i am getting segmentations faults when trying to run the program.

Code:
#include<stdio.h>
#include<pthread.h>
 
    int mata[18][16];
    int matb[16][18];
    int matc[18][18];
 
void* compute_c_ij(void* arg)
{
    int k;
    int n= *((int*)arg);
 
    for(k=0;k<16;++k)
    {
        matc[n][n] += mata[n][k] + matb[k][n];
    }
 
        pthread_exit(NULL);
}
 
int main()
{
 
    pthread_t thr[18];
 
 
    int n,m;
 
    int i,j;
 
    for(i=0;i<18;++i)
        for(j=0;j<16;++j)
            {
            mata[i][j] = (i+1) +(j+1);
            }
 
    for (i=0; i<16; ++i)
        for(j=0;j<18;++j)
            {
            matb[i][j]= (i+1)+(2*(j+1));
            }
 
 
    for (i=0;i<18 ; ++i)
     {
     pthread_create(&thr[i],NULL,compute_c_ij,NULL);
     }
 
     for (i=0 ; i<18 ; ++i)
     {
      pthread_join(thr[i],NULL);
      printf("%d\n",matc[i][i]);
     }
 
     pthread_exit(NULL);
}

Homework Statement


Homework Equations


The Attempt at a Solution

 
Last edited:
Physics news on Phys.org
Just an educated guess, but I don't think you are passing the right parameters into pthread_create. Your start function, compute_c_ij takes a parameter, and this is what should go in the 4th parameter of pthread_create (where you have NULL).

I found this example, which might be helpful, although much of it is in Spanish - http://www.dreamincode.net/forums/topic/53953-pthreadh/.