pthread实现矩阵乘法
时间: 2023-07-18 16:04:54 浏览: 175
下面是使用pthread库实现的矩阵乘法代码,其中使用了多线程来加速计算:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define M 3
#define K 2
#define N 3
int A[M][K] = {{1, 4}, {2, 5}, {3, 6}};
int B[K][N] = {{8, 7, 6}, {5, 4, 3}};
int C[M][N];
// 计算矩阵乘法的线程函数
void *matrix_multiply(void *arg) {
int *p = (int *)arg;
int i = *p;
for (int j = 0; j < N; j++) {
C[i][j] = 0;
for (int k = 0; k < K; k++) {
C[i][j] += A[i][k]*B[k][j];
}
}
pthread_exit(NULL);
}
int main() {
// 创建M个线程
pthread_t threads[M];
int ids[M];
for (int i = 0; i < M; i++) {
ids[i] = i;
pthread_create(&threads[i], NULL, matrix_multiply, (void *)&ids[i]);
}
// 等待所有线程执行完毕
for (int i = 0; i < M; i++) {
pthread_join(threads[i], NULL);
}
// 输出结果矩阵
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
return 0;
}
```
在该代码中,我们创建了M个线程,每个线程负责计算结果矩阵C的一行。线程函数matrix_multiply中,参数arg是一个指向整数的指针,其中保存了当前线程要计算的行号i。在计算矩阵乘法时,线程只需要计算矩阵A的第i行和矩阵B的所有列的乘积,然后将结果累加即可。
在主函数中,我们首先创建了M个线程并启动它们,然后使用pthread_join函数等待所有线程执行完毕。最后,输出结果矩阵C的内容。
阅读全文