为什么我的矩阵乘法代码不起作用?

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]