ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
95
/**
*Блокирующая посылка сообщения
*/
MPI_Send(&a[i][rank],1,MPI_INT,rank+1,a[i][rank],
MPI_COMM_WORLD);
MPI_Send(&b[i][rank],1,MPI_INT,rank+1,b[i][rank],
MPI_COMM_WORLD);
}
}
else
{
if(rank%2!=0)
{
for(i=0;i<n;i++)
{
MPI_Recv(&a[i][rank-1],1,MPI_INT,rank-
1,a[i][rank-1],
MPI_COMM_WORLD,&status);
printf("a[%d][%d] = %d\n ",i,rank-1,a[i][rank-
1]);
printf("a[%d][%d] = %d\n ",i,rank,a[i][rank]);
MPI_Recv(&b[i][rank-1],1,MPI_INT,rank-
1,b[i][rank-1],
MPI_COMM_WORLD,&status);
printf("b[%d][%d] = %d\n ",i,rank-1,b[i][rank-
1]);
printf("b[%d][%d] = %d\n ",i,rank,b[i][rank]);
c[i][rank-1] = b[i][rank-1]+a[i][rank-1];
c[i][rank] = b[i][rank]+a[i][rank];
printf("c[%d][%d] = %d\n ",i,rank-1,c[i][rank-
1]);
printf("c[%d][%d] = %d\n ",i,rank,c[i][rank]);
}
}
}
MPI_Finalize();
return(0);
}
Реализация “Fortran77”
Матрицы считываются из файлов "matrixA.txt", "matrixB.txt" нулевым процес-
сом, далее нулевой процесс производит рассылку строк матриц остальным процес-
сам. Процессы осуществляют сложение переданных им строк матриц и посылают
полученные строки нулевому процессу, который формирует результирующую мат-
рицу и выводит ее в файл "matrixC.txt".
Include 'mpif.h'
Integer Rank, Size, Ierr, Nm, I,
$ J, K, BCol, ECol, Nr
C Nm - порядок матрицы
1...,87,88,89,90,91,92,93,94,95,96 98,99,100,101,102,103,104,105,106,107,...180