为什么我的矩阵乘法代码不起作用?
Why is my matrix multiplication code not working?
我是 C++ 的新手,我编写了一个 C++ OpenMp 矩阵乘法代码,可以将两个 1000x1000 矩阵相乘。到目前为止它不是 运行,我很难找出错误所在。我想了几天,但我卡住了。
这是我的代码:
#include <iostream>
#include <time.h>
#include <omp.h>
using namespace std;
int N;
void Multiply()
{
//initialize matrices with random numbers
//#pragma omp for
int aMatrix[N][N], i, j;
for( i = 0; i < N; ++i)
{for( j = 0; j < N; ++j)
{aMatrix[i][j] = rand();}
}
int bMatrix[N][N], i1, j2;
for( i1 = 0; i1 < N; ++i1)
{for( j2 = 0; j2 < N; ++j2)
{bMatrix[i1][j2] = rand();}
}
//Result Matrix
int product[N][N] = {0};
//Transpose Matrix;
int BTransposed[j][i];
BTransposed[j][i] = bMatrix[i1][j2];
for (int row = 0; row < N; row++) {
for (int col = 0; col < N; col++) {
// Multiply the row of A by the column of B to get the row, column of product.
for (int inner = 0; inner < N; inner++) {
product[row][col] += aMatrix[row][inner] * BTransposed[col][inner];
}
}
}
}
int main() {
time_t begin, end;
time(&begin);
Multiply();
time(&end);
time_t elapsed = end - begin;
cout << ("Time measured: ") << endl;
cout << elapsed << endl;
return 0;
}```
您创建了一个矩阵
int BTransposed[j][i];
BTransposed[j][i] = bMatrix[i1][j2];
具有大小 j x i 并且比你使 [j][i] 中的元素等于 bMatrix[i1][j2] 中的元素,你应该有一个错误,因为你不能访问索引 j 和 i因为它从 0 到 j-1 和 i-1
转置矩阵 (BTransposed
) 构造不正确。您可以通过以下方式解决:
第一个选项:使用 for
循环创建正确的 BTransposed
矩阵。
for (int i = 0; i != N; i++)
for (int j = 0; j != N; j++)
BTransposed[i][j] = bMatrix[j][i]
第二个选项(更好的一个):完全删除 BTransposed
矩阵。需要时只需使用原始 bMatrix
并交换索引 i,j
!例如,您可以使用 BMatrix[inner][col]
.
而不是 BTransposed[col][inner]
我是 C++ 的新手,我编写了一个 C++ OpenMp 矩阵乘法代码,可以将两个 1000x1000 矩阵相乘。到目前为止它不是 运行,我很难找出错误所在。我想了几天,但我卡住了。
这是我的代码:
#include <iostream>
#include <time.h>
#include <omp.h>
using namespace std;
int N;
void Multiply()
{
//initialize matrices with random numbers
//#pragma omp for
int aMatrix[N][N], i, j;
for( i = 0; i < N; ++i)
{for( j = 0; j < N; ++j)
{aMatrix[i][j] = rand();}
}
int bMatrix[N][N], i1, j2;
for( i1 = 0; i1 < N; ++i1)
{for( j2 = 0; j2 < N; ++j2)
{bMatrix[i1][j2] = rand();}
}
//Result Matrix
int product[N][N] = {0};
//Transpose Matrix;
int BTransposed[j][i];
BTransposed[j][i] = bMatrix[i1][j2];
for (int row = 0; row < N; row++) {
for (int col = 0; col < N; col++) {
// Multiply the row of A by the column of B to get the row, column of product.
for (int inner = 0; inner < N; inner++) {
product[row][col] += aMatrix[row][inner] * BTransposed[col][inner];
}
}
}
}
int main() {
time_t begin, end;
time(&begin);
Multiply();
time(&end);
time_t elapsed = end - begin;
cout << ("Time measured: ") << endl;
cout << elapsed << endl;
return 0;
}```
您创建了一个矩阵
int BTransposed[j][i];
BTransposed[j][i] = bMatrix[i1][j2];
具有大小 j x i 并且比你使 [j][i] 中的元素等于 bMatrix[i1][j2] 中的元素,你应该有一个错误,因为你不能访问索引 j 和 i因为它从 0 到 j-1 和 i-1
转置矩阵 (BTransposed
) 构造不正确。您可以通过以下方式解决:
第一个选项:使用 for
循环创建正确的 BTransposed
矩阵。
for (int i = 0; i != N; i++)
for (int j = 0; j != N; j++)
BTransposed[i][j] = bMatrix[j][i]
第二个选项(更好的一个):完全删除 BTransposed
矩阵。需要时只需使用原始 bMatrix
并交换索引 i,j
!例如,您可以使用 BMatrix[inner][col]
.
BTransposed[col][inner]