Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用并行编程时调用函数 我只是在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; } #包括 #包括 #包括 #包括 使用名称空间std; #包括 空乘(双*x,双*y,整数,双点){ 对于(int i=0;i_C++_C_Function_Mpi - Fatal编程技术网

使用并行编程时调用函数 我只是在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; } #包括 #包括 #包括 #包括 使用名称空间std; #包括 空乘(双*x,双*y,整数,双点){ 对于(int i=0;i

使用并行编程时调用函数 我只是在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; } #包括 #包括 #包括 #包括 使用名称空间std; #包括 空乘(双*x,双*y,整数,双点){ 对于(int i=0;i,c++,c,function,mpi,C++,C,Function,Mpi,除了所提供的代码有问题外,您的问题的答案是否定的,每个处理元素都将按其调用的方式执行函数,但可能您不希望每个处理元素都执行整个点积,最好使用scatterv和gatherv来拆分程序;或者每个处理元素它自己的唯一向量会在以后被减少或增加,这很好。一定要使用MPI类型。点的初始值不会改变,因为它是按值传递的。点的副本在传递到乘法时生成,这就是修改的版本。如果您想乘法修改调整dot变量,并将更改保持在multiply函数之外,通过引用传递dot void multiply(double* x, do

除了所提供的代码有问题外,您的问题的答案是否定的,每个处理元素都将按其调用的方式执行函数,但可能您不希望每个处理元素都执行整个点积,最好使用scatterv和gatherv来拆分程序;或者每个处理元素它自己的唯一向量会在以后被减少或增加,这很好。一定要使用MPI类型。

点的初始值不会改变,因为它是按值传递的。
的副本在传递到
乘法
时生成,这就是修改的版本。如果您想
乘法
修改调整
dot
变量,并将更改保持在
multiply
函数之外,通过引用传递
dot

void multiply(double* x, double* y, int tai, double& dot);

您正在使用MPI的事实对此行为没有影响。

multiply
不返回任何内容(其返回类型为
void
,并且似乎没有输出参数)。您能展示a以便我们能看到您如何调用它吗?一致的缩进使代码更容易理解。感谢您的回答。我刚刚编辑了我的问题,以便展示一个简单的示例,说明我如何使用它。请,请,请,请,请,使用适当的缩进。这不是用C编写的。事实上,它现在正在工作。非常感谢。