[英]Matrix multiplication using pthreads
我正在尝试使用pthreads进行矩阵乘法,并为每行而不是每个元素的每次计算创建一个线程。 假设有两个矩阵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 < M; i++) // It should create M threads
{
struct v *data = (struct v *) malloc (sizeof (struct v));
data->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 < K; t++) // I want to compute it for a row instead of an element
{
C[test->i][test->j] = C[test->i][test->j] + A[test->i][t] * B[t][test->j];
}
pthread_exit (0);
}
首先,摆脱data-> j。 如果要计算整个行,则行索引是线程唯一需要的东西。 现在,您的Runner(..)将计算单个元素。 您必须遍历所有行元素,一一计算它们。 其次,不要在创建线程后立即加入线程。 这样,您一次只运行一个线程。 创建所有线程后,开始加入线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.