Multiplication masortingcielle à l’aide de pthreads

J’essaye de faire la multiplication de masortingce en utilisant pthreads et en créant un thread pour chaque calcul de chaque ligne au lieu de chaque élément. Supposons qu’il existe deux masortingces A [M] [K], B [K] [N]. Où vais-je mal?

int A[M][K]; int B[K][N]; int C[][]; void *runner (void *param); struct v { int i; int j; }; pthread_t tid[M]; for (i = 0; i i = i; data->j = j; pthread_create (&tid[count], &attr, runner, data); pthread_join (tid[count], NULL); count++; } runner (void *param) // { struct v *test; int t = 0; test = (struct v *) param; for (t = 0; t i][test->j] = C[test->i][test->j] + A[test->i][t] * B[t][test->j]; } pthread_exit (0); } 

Tout d’abord, débarrassez-vous des données-> j. Si vous calculez des lignes entières, l’index de ligne est la seule chose dont votre thread a besoin. À l’heure actuelle, votre coureur (..) calcule un seul élément. Vous devez parcourir tous les éléments de la ligne en les calculant un par un. Deuxièmement, ne rejoignez pas un fil juste après sa création. De cette façon, vous n’avez qu’un thread à la fois. Commencez à rejoindre les threads lorsque tous les threads ont été créés.