【发布时间】:2012-03-17 14:24:37
【问题描述】:
首先,我需要计算一些总和,然后找到这些总和的最小值,这是使用 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();
但是,现在我不需要找到整个二维矩阵的最小和,而是需要找到矩阵中每个分区的最小和,一个分区将是一个由四个点定义的正方形,无论矩阵大小如何,总会有 16 个方格(矩阵不小于 800 * 800)。我正在尝试使用 MPI 笛卡尔拓扑来实现这一点,但是我在围绕实现时遇到了麻烦。任何帮助或提示将不胜感激。
【问题讨论】:
-
您能否详细说明您希望如何对算法进行最高并行化?您打算并行化哪些循环以及笛卡尔拓扑在哪里发挥作用?
标签: parallel-processing mpi topology cartesian