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

UptoLike

102
c ПЭ с номером rank = p приводит свою строку с номером k
c к диагональному виду. Активная строка k передается всем ПЭ
if (rank == p) then
ch=1.0/a(k,nom)
do j=nom,n+1
a(k,j)=a(k,j)*ch
end do
do j=1,n+1
pas(j)=a(k,j)
end do
!! рассылаем всем ПЭ
call MPI_Bcast(pas, n+1, MPI_DOUBLE_PRECISION, p,
$ comm, ierr)
do i=m,k+1,-1
do j=n+1,nom,-1
a(i,j)=a(i,j)-a(i,nom)*pas(j)
end do
end do
end if
c ПЭ с номером rank < p
if (rank < p) then
call MPI_Bcast(pas, n+1, MPI_DOUBLE_PRECISION, p,
$ comm, ierr)
do i=m,k+1,-1
do j=n+1,nom,-1
a(i,j)=a(i,j)-a(i,nom)*pas(j)
end do
end do
end if
c ПЭ с номером rank > p
if (rank > p) then
call MPI_Bcast(pas, n+1, MPI_DOUBLE_PRECISION, p,
$ comm, ierr)
do i=m,k,-1
do j=n+1,nom,-1
a(i,j)=a(i,j)-a(i,nom)*pas(j)
end do
end do
end if