Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
MPI减少优化_Mpi - Fatal编程技术网

MPI减少优化

MPI减少优化,mpi,Mpi,我有一个相当简单的MPI程序,其中每个节点都进行计算,最后我需要所有计算的总和。除了每个节点计算的最终总和之外,每个节点不需要进行任何通信 目前,这就是我正在做的事情,它正在发挥作用 MPI_Init(&argc, &argv); // start up "virtual machine" MPI_Comm_size(MPI_COMM_WORLD, &p); // get size of VM MPI_Comm_rank(MPI_COMM

我有一个相当简单的MPI程序,其中每个节点都进行计算,最后我需要所有计算的总和。除了每个节点计算的最终总和之外,每个节点不需要进行任何通信

目前,这就是我正在做的事情,它正在发挥作用

MPI_Init(&argc, &argv);               // start up "virtual machine"
MPI_Comm_size(MPI_COMM_WORLD, &p);    // get size of VM
MPI_Comm_rank(MPI_COMM_WORLD, &id);   // get own rank in VM

int localsum[1] = {0};
int globalsum[1] = {0};


for (i = lower+id; i <= upper; i=i+p) {
    localsum[0] = localsum[0] + getResult(i);
}

MPI_Reduce(localsum,globalsum,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

if(id==0)
{
    printf("globalsum1 = %d \n",globalsum[0]);
}
MPI_Init(&argc,&argv);//启动“虚拟机”
MPI_Comm_大小(MPI_Comm_WORLD,&p);//获取虚拟机的大小
MPI_Comm_排名(MPI_Comm_WORLD,&id);//在虚拟机中获得自己的排名
int localsum[1]={0};
int globalsum[1]={0};

对于(i=lower+id;i,正如韦斯利·布兰德(Wesley Bland)在评论中指出的那样,这是一个很难回答的问题,因为我们不知道
getResults()
做了什么,也不知道我们在谈论多少额外的工作时间

但是,我有一个建议,就是将对
getResult()
的昂贵调用与更便宜的调用配对

示例:将
getResult(下)
getResult(上)
&
getResult(下+1)
getResult(上-1)

示例循环(需要进行一些修改以修复某些边缘情况):


for(i=id;i)这是一个很难回答的问题,如果你不知道(或至少不知道)getresult()中发生了什么事,你能告诉我们更多关于它的信息吗?或者如果代码足够短,请提供代码。整个程序都在做euler-ToClient求和。所以getresult(i)求出i的相对素数,x为所有正x,其中xHi感谢您的回答。这确实是个好主意,我们将对此进行研究。尽管我希望MPI中会有一个内置函数来设置x任务,然后进程可以根据需要抓取任务或类似的任务。(知道在OpenMP中使用动态或引导调度是可能的)。我在原始问题中添加了一条关于getResult在做什么的注释。不幸的是,MPI并不是在这个模型下运行的。还有其他一些编程库/语言有一个任务模型,其中一些甚至是在MPI之上构建的,但MPI本身没有任何功能。是否还有计算性能的方法ect split?对于下面循环中的任何给定i,我们将调用i-1调用hcf(最高公因数)。因此,i=5将调用4个hcf调用,6将调用5个hcf调用。还有一点需要注意。由于某些原因,配对建议没有真正优化运行时。
for (i = id; i <= (upper-lower)/2; i=i+p) {
    localsum[0] = localsum[0] + getResult(lower+i) + getResult(upper-i) ;
}