Матричное умножение с использованием pthreads

Я пытаюсь сделать матричное умножение с помощью pthreads и создавая один stream для каждого вычисления каждой строки, а не для каждого элемента. Предположим, что существуют две матрицы A [M] [K], B [K] [N]. Где я иду не так?

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); } 

Во-первых, избавьтесь от data-> j. Если вы вычисляете целые строки, индекс строки – это единственное, что нужно вашему streamу. Прямо сейчас ваш бегун (..) вычисляет один элемент. Вы должны перебирать все элементы строк, вычисляя их один за другим. Во-вторых, не присоединяйтесь к нити сразу после ее создания. Таким образом, вы используете только один stream. Начните объединение streamов, когда все streamи были созданы.