ВУЗ:
Рубрика:
93
Call MPI_INIT(Ierr)
Call MPI_COMM_SIZE(MPI_COMM_WORLD, Size, Ierr)
Call MPI_COMM_RANK(MPI_COMM_WORLD, Rank, Ierr)
C Задаются начальные значения матриц А и В
If (Rank.eq.0) Then
Do I = 1,Nm
Do J = 1,Nm
A(I,J) = I*J*1D0
B(I,J) = 1/A(I,J)
End Do
End Do
End If
C Каждый процесc определяет первый и последний столбец
C своих расчетов
BCol = Rank*Nm/Size+1
ECol = (Rank+1)*Nm/Size
C Каждый процесc определяет свои массивы размера полоc и
C их положение
Do I = 0,Size-1
Counts(I) = ((I+1)*Nm/Size-I*Nm/Size)*Nm
Shifts(I) = I*Nm/Size*Nm
End Do
Do I = 0,Size-1
Shifts2(I) = Shifts(Rank)
Counts2(I) = Counts(Rank)
End Do
C «0» посылает всем процессам матрицу А и соответствующую
C полосу матрицы В
Call MPI_BCAST(A(1,1), Nm*Nm,
$ MPI_DOUBLE_PRECISION, 0,
$ MPI_COMM_WORLD, Ierr)
Call MPI_SCATTERV(B(1,1), Counts, Shifts,
$ MPI_DOUBLE_PRECISION, Bc(1,1),
$ Counts(Rank),MPI_DOUBLE_PRECISION,
$ 0, MPI_COMM_WORLD, Ierr)
Do J = BCol,ECol
Do K = 1,Nm
Do I = 1,Nm
C(I,J) = C(I,J)+A(I,K)*Bc(K,J-BCol+1)
Страницы
- « первая
- ‹ предыдущая
- …
- 91
- 92
- 93
- 94
- 95
- …
- следующая ›
- последняя »
