if(coords[0] == 0)
{ MPI_Scatterv(B,countb,dispb, typeb, BB, n[1]*nn[1], MPI_DOUBLE, 0,comm_1D[1]);
}
/* 3. Передача подматриц AA в измерении y */ MPI_Bcast(AA, nn[0]*n[1], MPI_DOUBLE, 0,
comm_1D[1]);
/* 4. Передача подматриц BB в измерении x */ MPI_Bcast(BB, n[1]*nn[1], MPI_DOUBLE, 0,
comm_1D[0]);
/* 5. Вычисление подматриц СС в каждой ветви */
for(i = 0; i < nn[0]; i++)
{for(j = 0; j < nn[1]; j++)
{CC(i,j) = 0.0;
for(k = 0; k < n[1]; k++)
{CC(i,j)=CC(i,j)+AA(i,k)*BB(k,j);
}
}
}
/* 6. Сбор всех подматриц СС в ветви 0 */ MPI_Gatherv(CC, nn[0]*nn[1], MPI_DOUBLE, C,
countc, dispc, typec, 0, comm_2D);
/* Освобождение памяти всеми ветвями и завершение подпрограммы */
free(AA);
free(BB);
free(CC); MPI_Comm_free(&pcomm); MPI_Comm_free(&comm_2D); for(i = 0; i < 2; i++)
{ MPI_Comm_free(&comm_1D[i]);
}
if(rank == 0)
{free(countc);
free(dispc);