Parallel processing 如何正确使用MPI笛卡尔拓扑

Parallel processing 如何正确使用MPI笛卡尔拓扑,parallel-processing,mpi,topology,cartesian,Parallel Processing,Mpi,Topology,Cartesian,首先,我需要计算一些和,然后找到这些和的最小值,这是这样做的,使用mpi: MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); . . . x = (size)/numpr

首先,我需要计算一些和,然后找到这些和的最小值,这是这样做的,使用mpi:

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
                 .
                 .
                 .   
    x = (size)/numprocs;
    low = myid * x;
    high = low + x;

    for(i =low; i < high; i++){
        for(j = 0; j < matrixDim; j++){
            for(k = 0; k < matrixDim; k+=gap){
                for(m = 0; m < matrixDim; m+=gap){
                    c1 = calculation1(i,j,k,m);
                    if(c1 > cutoff){
                        sum += calculation2(modifier1[k][m], modifier2[k][m]);
                    }      
                }
            }

            if(sum < min){
                min = sum;
                minI = i;
                minJ = j;
            }
            sum = 0;
        }
    }   
MPI_Reduce(&result, &minimum, 1, MPI_FLOAT, MPI_MIN, 0, MPI_COMM_WORLD);
if( 0 == myid)
printf("The  min is: %f", minimum);
MPI_Finalize();
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和numprocs);
MPI通信等级(MPI通信世界和myid);
.
.
.   
x=(大小)/numproc;
低=myid*x;
高=低+x;
用于(i=低;i<高;i++){
对于(j=0;j截止){
总和+=计算2(修饰符1[k][m],修饰符2[k][m]);
}      
}
}
如果(总和<分钟){
最小值=总和;
minI=i;
minJ=j;
}
总和=0;
}
}   
MPI_Reduce(结果和最小值,1,MPI_浮点值,MPI_最小值,0,MPI_COMM_WORLD);
如果(0==myid)
printf(“最小值为:%f”,最小值);
MPI_Finalize();

但是,现在我不需要求整个2D矩阵的最小和,我需要求矩阵中每个分区的最小和,一个分区将是由四个点定义的正方形,并且无论矩阵大小,总有16个正方形(矩阵不小于800*800)。我正试图使用MPI笛卡尔拓扑来实现这一点,但在实现过程中遇到了困难。任何帮助或提示都将不胜感激。

这与其说是一个答案,不如说是一个延伸的评论

比如,我不确定我是否认为这里需要笛卡尔(或任何其他)拓扑。如果您的问题与您描述的一样,那么每个MPI进程都可以计算分区最小和,而无需从其他进程发送或接收数据(可能除了初始分散和终端聚集)


拓扑通常用于问题分解为多个部分,并且这些部分具有某种相对相邻性的情况:例如,在笛卡尔拓扑中,一个过程(或问题的一部分)可能有东、西、北和南邻居。我在这里看不到这样的概念,也看不到任何将它强加到这个问题上的实用工具。

您能否精确地说明您希望如何对算法进行顶级并行化?您打算并行化哪些循环?笛卡尔拓扑在哪里发挥作用?