ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
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
1...,96,97,98,99,100,101,102,103,104,105 107,108,109,110,111,112,113,114,115,116,...180