Высокопроизводительные вычисления на кластерах. Беликов Д.А - 90 стр.

UptoLike

90
Предположим, что нет нужды заботиться об экономии памяти и
можно позволить себе хранить перемножаемые матрицы A и B в
памяти каждого процессорного элемента. Тогда не возникает ника-
ких проблем с получением результата: каждый процесс имеет в рас-
поряжении все необходимые данные, чтобы рассчитать свою полосу
(блочный столбец) матрицы С. После этого необходимо собрать все
полученные блоки матрицы C с каждого процесса (сделаем это на
всех процессах).
Program Example
Implicit None
Include 'mpif.h'
Integer Rank, Size, Ierr, Nm, I, J, K, BCol, ECol, Nr
c Nm - порядок матрицы
Parameter (Nm=100)
Double Precision A(Nm, Nm), B(Nm, Nm), C(Nm, Nm)
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*1.0D0
B(I,J) = 1/A(I,J)
End Do
End Do
End If
A
B
C
1 2 3 4 5 6
Рис. 5.4 Умножение матриц