C 并行矩阵乘法,计算错误
C++ Parallel Matrix Multiplication, incorrect calculations
我的乘法的结果就像
-842150451 -842150451 -842150451 -842150451
-842150451 -842150451 -842150451 -842150451
-842150451 -84215045 -842150451 -842150451
-842150451 -84215045 -842150451 -842150451
我不明白为什么,有人可以帮忙吗?
#include <iostream>
#include <stdlib.h>
#include <omp.h>
#include <random>
using namespace std;
#define NUM_THREADS 2
double** A;
double** B;
double** C;
double t_Start;
double t_Stop;
int Am;
int An;
int Bm;
int Bn;
void Get_Matrix();
void Mat_Mult_Parallel();
int main()
{
cout << "Matrix A: ";
cin >> Am >> An;
cout << "Matrix B: ";
cin >> Bm >> Bn;
Get_Matrix();
Mat_Mult_Parallel();
system("pause");
return 0;
}
void Get_Matrix()
{
A = new double*[Am];
B = new double*[Bm];
C = new double*[Am];
for (int i = 0; i<Am; i++) { A[i] = new double[An]; }
for (int i = 0; i<Bm; i++) { B[i] = new double[Bn]; }
for (int i = 0; i<Am; i++) { C[i] = new double[Bn]; }
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for private(i,j) schedule(dynamic)
for (int i = 0; i<Am; i++)
{
for (int j = 0; j<An; j++)
{
A[i][j] = rand() % 10 +1;
cout << A[i][j] << " ";
}
cout << endl;
}
printf("n");
#pragma omp parallel for private(i,j) schedule(dynamic)
for (int i = 0; i<Bm; i++)
{
for (int j = 0; j<Bn; j++)
{
B[i][j] = rand() % 10 + 1;
cout << B[i][j] << " ";
}
cout << endl;
}
printf("Matrix Created.n");
}
void Mat_Mult_Parallel()
{
int i, j, k;
t_Start = omp_get_wtime();
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for private(i,j) schedule(dynamic)
for (i = 0; i<Am; i++)
{
for (j = 0; j<Bn; j++)
{
for (k = 0; k<An; k++)
{
C[i][j] += A[i][k] * B[k][j];
}
cout << C[i][j] << " ";
}
cout << endl;
}
t_Stop = omp_get_wtime() - t_Start;
cout << "Parallel: " << t_Stop << " seconds." << endl;
}
您没有初始化矩阵C,而是使用' ='运算符,将值添加到矩阵C中的随机inital值中,因此您首先需要类似的东西:
for ( int i = 0; i < Am; i++ )
{
for ( int j = 0; j < Bn; j++ )
{
C[ i ][ j ] = 0.0;
}
}
另外,您可以使用memset/setMem c函数(取决于系统),可以更快。
顺便说一句,请勿在并行循环中使用" cout",结果可能会造成混淆。
相关文章:
- 我的字符计数代码计算错误.为什么
- 为什么 2 个双精度值之间的差值计算错误?
- C++ openmp 并行计算计算错误的结果
- Qt qreal计算错误
- C 并行矩阵乘法,计算错误
- Arduino计算错误 - 不应该时给出负值
- 当尺寸变大时,会出现矩阵计算错误
- C++ if 语句数学计算错误
- 浮点数的不准确导致计算错误
- 优化标志会导致计算错误
- Kahan求和算法在GCC编译时存在较大的计算错误
- 为什么在函数中传递参数时会出现算术计算错误
- 增加数组大小时 CUDA 主体磁贴计算错误代码 77
- OpenGL漫射照明计算错误
- 具有参数计算错误的重载函数
- 我的程序中有计算错误吗
- 在C++中使用ceil函数时出现计算错误
- 模拟读数计算错误
- struct和time_t的计算错误
- Pow()计算错误