【发布时间】:2018-03-14 20:18:11
【问题描述】:
我有一个关于在 C++ 程序中使用 MPI 的相当简单的问题。确实,让我们举个例子:
#include <iostream>
#include <sstream>
#include <cblas.h>
#include <cmath>
using namespace std;
#include <mpi.h>
void multiply(double* x,double* y,int tai,double dot){
for(int i=0; i<tai;i=i+1){
dot=dot+x[i]*y[i];
}
}
int main(int argc, char* argv[]) {
const int n=32;
int rank;
int size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int tai=n/size;
double* x=new double[tai];
double* y=new double[tai];
srand(time(0)+rank);
for(int i=0;i<tai;i=i+1){
x[i]=(double)rand()/RAND_MAX*10;
y[i]=(double)rand()/RAND_MAX*10;
}
double dot=0;
multiply(x,y,tai,dot);
double ddot;
MPI_Reduce(&dot, &ddot, 1, MPI_DOUBLE, MPI_SUM,0, MPI_COMM_WORLD);
if(rank==0){
cout<<"product:"<<ddot<<endl;
}
MPI_Finalize();
return 0;
}
然后,我在程序中调用函数“multiply”来相乘两个向量,但不幸的是它返回了“dot”的初始值(基本上是 0)。
我只是想知道我们在做并行编程的时候调用函数有没有什么特别的地方。
PS:我知道整个程序正在运行,因为当我在“主”函数中直接将我的 2 个向量相乘时,它会给我带来很好的结果
【问题讨论】:
-
multiply没有返回任何东西(它的返回类型是void并且它似乎没有输出参数)。你能显示一个minimal reproducible example 以便我们看看你是怎么称呼它的吗? -
一致的缩进让代码更容易理解。
-
感谢您的回答。我刚刚编辑了我的问题,以展示我如何使用它的简单示例。
-
请,请,请,使用适当的缩进。
-
这不是用 C 写的。