ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
104
End Do
End Do
C Каждый процесс отправляет свою рассчитанную полосу С
C и заполняет недостающие полосы данными, поступающими от
C других процессов
Call MPI_ALLTOALLV(C(1,1), Counts2, Shifts2,
$ MPI_DOUBLE_PRECISION, Cc(1,1), Counts,
$ Shifts, MPI_DOUBLE_PRECISION,
$ MPI_COMM_WORLD, Ierr)
if (Rank.eq.0) write(6,*) "A=",A
if (Rank.eq.0) write(6,*) "B=",B
if (Rank.eq.0) write(6,*) "C=",Cc
Call MPI_FINALIZE(Ierr)
End
Вычисление дифференциальных уравнений
Технология параллельного программирования достаточно хорошо разработана
для области краевых задач. В этом случае используется техника декомпозиции по
процессорам расчетной области, как правило, с перекрытием подобластей.
На рис. П.2.1 представлено такое разложение исходной расчетной области на четыре
процессора с топологией одномерной сетки. Заштрихованные области на каждом
процессоре обозначают те точки, в которых расчет не производится, но они необхо-
димы для выполнения расчета в пограничных точках. В них должна быть предвари-
тельно помещена информация с пограничного слоя соседнего процессора.
Рис.П.2.1. Пример декомпозиции двумерной расчетной области
Рассмотрим пример программы решения уравнения Лапласа на двумерной ре-
гулярной сетке.
Уравнение Лапласа:
.
0
2
2
2
2
=
∂
∂
+
∂
∂
y
f
x
f