I've made a matrix multiplier piece of code designed to quantify how much faster threading is for each size of matrix. The code where threads are made and executed is below. I'm new to threading but whenever I use threading it seems to take about 12 times longer, am I doing something wrong or does anyone know why it's so much slower?
Thanks,
void *vectorMultiply(void *arguments){
struct vectorV *args = arguments;
int sum = 0;
for (int iii = 0; iii < args->n; iii++) {
sum = sum + args->first[args->i][iii] * args->second[iii][args->ii];
}
args->out[args->i][args->ii] = sum;
}
void singleThreadVectorMultiply(int n,int i,int ii, int
**first, int **second, int **out){
int sum = 0;
for (int iii = 0; iii < n; iii++) {
sum = sum + first[i][iii] * second[iii][ii];
}
out[i][ii] = sum;
}
void multiplyMatrix(int n, int** first, int** second, int** out){
pthread_t tid[n][n];
struct vectorV values[n][n];
for (int i = 0; i < n; i++) {
for (int ii = 0; ii < n; ii++) {
if(!SINGLETHREAD){
values[i][ii].n=n;
values[i][ii].i=i;
values[i][ii].ii=ii;
values[i][ii].first = first;
values[i][ii].second=second;
values[i][ii].out=out;
pthread_create(&tid[i][ii], NULL, vectorMultiply,
(void *)&values[i][ii]);
}
else{
clock_t time;
time = clock();
singleThreadVectorMultiply(n,i,ii,first,second,out);
time = clock() - time;
totalTime+=time;
}
}
}
if(!SINGLETHREAD){
clock_t time;
time = clock();
for(int i=0; i < n; i++)
for(int ii=0; ii < n; ii++)
pthread_join( tid[i][ii], NULL);
time = clock() - time;
totalTime+=time;
}
}