我正在try 使用C中的OMP将两个n乘以n的矩阵相乘. 但我的代码只计算对角线元素.以下是代码:
我的代码
# include <stdio.h>
# include <omp.h>
int main(void){
int N, element, tid;
int i, j;
scanf("%d", &N); // matrix dimension
int A[N][N]; // matrix A
int B[N][N]; // matrix B
int C[N][N]; // matrix C := AB
// declare elements matrix A
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
scanf("%d", &element);
A[i][j] = element;
}
}
// declare elements matrix B
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
scanf("%d", &element);
B[i][j] = element;
}
}
omp_set_num_threads(N); // set the number of threads
#pragma omp parallel default(none) shared(A, B, C, N) private(i, j, tid)
{
tid = omp_get_thread_num(); // returns the number of the currently executing thread within the team
#pragma omp for
for (i = 0; i < N; i++){
C[tid][i] = 0;
for (j = 0; j < N; j++){
//tid = i*n + j;
C[tid][i] += A[tid][j]*B[j][i];
}
}
}
// print matrix C
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", C[i][j]);
}
printf("\n");
}
return(0);
}\
这是我用N=2和矩阵A={{1,2},{3,4}}B={{1,2},{3,4}得到的结果
C={{7,随机数},{随机数,22}}