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

UptoLike

59
значения с наперед заданной точностью становится непростой вы-
числительной задачей.
Построим в области интегрирования равномерную сетку
N=k,
N
k
=x|x
kk
0,
N
и воспользуемся формулой средних
прямоугольников (рис. 3.1). При данном подходе приближенное
значение искомого интеграла определяется по формуле
1
0
1
0
1
2
1
N
=k
k+k
x+x
F
N
dxxF
, что позволяет не вычислять значения
подынтегральной функции в узлах сетки.
Приведенные ниже примеры построены по следующему прин-
ципу: область интегрирования разбивалась на подобласти по числу
используемых процессов, а исходный интеграл представлялся в ви-
де суммы интегралов по таким частичным отрезкам. Схема вычис-
лений состоит из трех этапов: во-первых, каждый процесс опреде-
ляет свои границы интегрирования и число интервалов разбиения,
приходящихся на данную подобласть. Во-вторых, каждый процесс
вычисляет интеграл по своему частичному отрезку. На последнем,
третьем этапе, происходит суммирование всех вычисленных значе-
ний «0»-процессом с получением значения интеграла. Кроме того,
на «0»-процесс возлагается обязанность оценки времени, затрачен-
ного на выполнение программы, определения достигнутой точности
(разность точного и приближенного значения интеграла) и вывода
результата на экран.
Program Example3a
Include 'mpif.h'
Integer Size, Rank, Ierr, I, N, Status(MPI_STATUS_SIZE)
Double Precision Sum, GSum, A, B, time1, time2,
$ Al, Bl, X, F, ISum
C Пределы интегрирования
Parameter (A=0.d0, B=1.d0)
C Подынтегральная функция
F(x)=DLog(1/x)
Call MPI_INIT(Ierr)
Call MPI_COMM_SIZE(MPI_COMM_WORLD, Size, Ierr)