29
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI) Пазников Алексей Александрович Параллельные вычислительные технологии СибГУТИ (Новосибирск) Осенний семестр 2015 www: cpct.sibsutis.ru/~apaznikov/teaching q/a: piazza.com/sibsutis.ru/fall2015/pct2015fall

Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Embed Size (px)

Citation preview

Page 1: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Пазников Алексей Александрович

Параллельные вычислительные технологии СибГУТИ (Новосибирск) Осенний семестр 2015

www: cpct.sibsutis.ru/~apaznikov/teaching q/a: piazza.com/sibsutis.ru/fall2015/pct2015fall

Page 2: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Дифференциальные уравнения в частных производных

Page 3: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

3

Дифференциальные уравнения в частных производных

Обычное дифференциальное уравнение – уравнение, содержащее производные функций одной переменной.

Дифференциальное уравнение в частных производных (ДУЧП) – уравнение, содержащее частные производные функции нескольких переменных.

Многие физические явления моделируются с помощью ДУЧП, например:

▪ Обтекание крыла самолёта.

▪ Циркуляция крови в теле человека.

▪ Циркуляция воды в океане.

▪ Деформация моста под действием транспорта.

▪ Моделирование климатических явлений (“прогноз погоды”).

▪ Моделирование стихийных бедствий.

▪ Изменение температуры различных объектов.

▪ и т.д.

Методы решения ДУЧП:

▪ Методы конечных элементов.

▪ Методы конечных разностей.

Page 4: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

4

Методы решения ДУЧП:

▪ Методы конечных элементов.

▪ Методы конечных разностей (МКР).

Метод конечных разностей предполагает представления ДУЧП в виде СЛАУ. Матрицы, полученные в результате этого, разрежены. Поэтому реализации МКР разделяются на две категории в зависимости от того, как представлены разреженные матрицы.

▪ Матрицы представлены явно, с использованием структур, которые поддерживают эффективный доступ к ненулевым элементам.

▪ Матрицы представлены неявно.

Дифференциальные уравнения в частных производных

Page 5: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

5

u = f(x, y) – u – функция от двух переменных

ux – частная производная функции u по x

yu – частная производная функции u по y

Порядок k – это взятие k частных производных (например, для функции u имеет место три частных производных второго порядка: uxx, uxy, uyy.

ДУЧП второго порядка не содержит производные порядка больше двух.

Линейное ДУЧП представляет собой уравнение следующего вида:

Auxx + 2Buxx + Cuyy + Eux + Fuy + Gu = H

где A, B, C, D, E, F, G, H – это функции от x и y.

Примеры линейных ДУЧП:

4uxx + 6xyuxy = 0

2uxy + x2uyy = sin(xy)

Примеры нелинейных ДУЧП второго порядка:

u2xx + uyy = 0

uuxy + sin(xy)uyy = x + y

Классификация ДУЧП

Page 6: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Линейное ДУЧП представляет собой уравнение следующего вида:

Auxx + 2Buxx + Cuyy + Eux + Fuy + Gu = H

где A, B, C, D, E, F, G, H – это функции от x и y.

В зависимости от значений A, B, C, линейные ДУЧП второго порядка классифицируются:

▪ Эллиптические ДУЧП: B2 – AC < 0

▪ Параболические ДУЧП: B2 – AC = 0

▪ Гиперболические ДУЧП: B2 – AC > 0

Примеры:

Уравнение Пуассона uxx + uyy = f(x, y) – пример эллиптического ДУЧП. С помощью него моделируются проблемы электричества, магнетизма, гравитации, процессы распределения тепла или электричества в однородных проводниках. Если f(x, y) = 0, уравнение Пуассона называется уравнением Лапласа.

Уравнение теплопроводности kuxx = ut – пример параболического ДУЧП. Уравнение описывает передачу тепла в твёрдых телах. Также этим уравнением описывается професс диффузии жидкостей и газов (уравнение диффузии).

Волновое уравнение c2uxx = utt – пример гиперболического ДУЧП. Волновое уравнение позволяет моделировать распространение волны и вибрацию струн и мембран.

6

Классификация линейных ДУЧП

Page 7: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Метод конечных разностей приближает решение ДУЧП путем разделения переменных (по времени и пространству) на дискретные интервалы.

Рассмотрим функцию f. Необходимо расчитать первую и вторую производные этой функции в точке x. Приближенное вычисление производной:

f'(x) ≈ [ f(x + h / 2) – f(x – h / 2)] / h

7

Разностные отношения

f(x + h / 2)

f(x – h / 2)

f'(x)

x – h x – h / 2 x x + h / 2 x + h

Вторая производная f''(x) = f'(f'(x)):

f''(x) ≈ ([f(x + h / 2 – h / 2) – f(x + h / 2 – h / 2)] / h – [f(x – h / 2 + h / 2) – f(x – h / 2 – h / 2)]) / h ≈≈ [f(x + h) – f(x) – ((f(x) – f(x – h))] / h2 ≈≈ [f(x + h) – 2f(x) + f(x – h)] / h2

Page 8: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Моделирование вибрации страны

Page 9: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Цель состоит в моделировании вибрации струны (такой, как, например, гитарная). В частности, требуется определить позицию струны в определённый момент времени на основе текущей позиции.

▪ Концы струны зафиксированы.

▪ Переменная x отражает положение точки между концами струны. Левый конец соответствует x = 0, правый – x = 1. Т.е. 0 ≤ x ≤ 1.

▪ Переменная t ≥ 0 соответствует времени. Изначальная позиция струны – это её позиция в момент t = 0.

▪ Функция u(x, t) описывает смещение струны в точке x в момент времени t.

9

Моделирование вибрации струны

1.5

1.0

0.5

0

– 0.5

– 1.0

– 1.5

t = 0.0 и 1.0

t = 0.1 и 0.9

t = 0.2 и 0.8

t = 0.3 и 0.7

t = 0.5

t = 0.4 и 0.6

Page 10: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Данная проблема моделируется множеством уравнений.

Первое уравнение – линейное ДУЧП второго порядка, отражает процесс изменения смещений струны:

4uxx = utt, 0 < x < 1, 0 < t

Второе уравнение описывает то, что струна зафиксирована с двух сторон:

u(0, t) = u(1, t) = 0, t > 0

Третье и четвёртое уравнения описывают начальную позицию и скорость струны в начальный момент времени:

u(x, 0) = sin(πx), ut(x, 0) = 0, 0 ≤ x ≤ 1

Данный вид уравнений – частный случай волнового уравнения общего вида:

c2uxx = utt, 0 ≤ x ≤ 0, t ≥ 0

u(x, 0) = F(x) и ut(x, 0) = G(x) на [0, a]

u(0, t) = u(a, t) = 0

10

Моделирование вибрации струны

Page 11: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Необходимо найти решение задачи для значений x, заключённых между 0 и a, во все моменты времени от 0 до T.

Разобьём пространственный интервал на n частей и временной интервал на m частей:

▪ h = a / n – шаг по пространству

▪ k = T / m – шаг по времени

Если шаг k будет слишком большим (kc / h > 1), то дискретизация будет слишком грубой и решение не будет сходиться к истинному.

Если шаг k будет слишком малым (kc / h < 1), то ошибки округления будут накапливаться и это также уменьшит точность решения.

Поэтому оптимальным вариантом будет случай, когда kc / h = 1.

Пусть

▪ xi = ih, i = 0, 1, …, n

▪ tj = jk, j = 0, 1, …, m

Тогда

▪ ui, j = u(xi, tj) – смещение струны в позиции xi в момент времени tj

11

Моделирование вибрации струны

Page 12: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Используя полученные формулы для апроксимации производной

f''(x) ≈ [f(x + h) – 2f(x) + f(x – h)] / h2

можно расчитать вторые производные uxx и utt:

uxx(xi, tj) ≈ [u(xi + h, tj) – 2u(xi, tj) + u(xi – h, tj)] / h2 ≈ [ui+1,j – 2ui,j + ui–1,j] / h

2

utt(xi, tj) ≈ [u(xi, tj + k) – 2u(xi, tj) + u(xi, tj – k)] / k2 ≈ [ui,j+1 – 2ui,j + ui,j–1 ] / k2

Эти формулы теперь можно подставить в исходное волновое уравнение!

12

Моделирование вибрации струны

k

T

x a

ui,j= u(xi, tj)

ui, j+1

ui, j–1

ui–1, j+1 ui+1, j+1

ui+1, j–1ui–1, j–1

ui–1, j ui+1, j

Page 13: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Используя полученные формулы для апроксимации производной

f''(x) ≈ [f(x + h) – 2f(x) + f(x – h)] / h2

можно расчитать вторые производные uxx и utt:

uxx(xi, tj) ≈ [u(xi + h, tj) – 2u(xi, tj) + u(xi – h, tj)] / h2 ≈ [ui+1,j – 2ui,j + ui–1,j] / h

2

utt(xi, tj) ≈ [u(xi, tj + k) – 2u(xi, tj) + u(xi, tj – k)] / k2 ≈ [ui,j+1 – 2ui,j + ui,j–1 ] / k2

Эти формулы теперь можно подставить в исходное волновое уравнение

и выразить смещение:

ui,1 ≈ L / 2 × (ui+1, 0 + ui-1, 0) + (1 – L) ui, 0 + kG(ih)

ui, j + 1 ≈ 2 × (1 – L) × uij + L (ui+1, j + ui – 1, j) – ui, j – 1

13

Моделирование вибрации струны

Page 14: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

14

Последовательная версия программы

#define F(x) sin(M_PI * (x)) // Начальная позиция струны#define G(x) 0.0 // Начальная скорость струны#define a 1.0 // Длина струны#define c 2.0 // Константа#define m 20 // Количество временных интервалов#define n 8 // Количество пространственных интервалов#define T 1.0 // Временной отрезок моделирования

int main() { const double h = a / n; // Шаг по пространству const double k = T / m; // Шаг по времени const double L = (k * c / h) * (k * c / h); double u[m + 1][n + 1]; // Смещения струны

for (j = 0; j <= m; j++) // Смещение на концах струны u[j][0] = u[j][n] = 0;

for (i = 1; i < n; i++) // Смещение в начальный момент времени u[0][i] = F(i * h);

for (i = 1; i < n; i++) // Смещение в момент, следующий после начального u[1][i] = (L / 2.0) * (u[0][i + 1] + u[0][i - 1]) + (1.0 - L) * u[0][i] + k * G(i * h);

for (j = 1; j < m; j++) // Смещение в остальные моменты времени for (i = 1; i < n; i++) u[j + 1][i] = 2.0 * (1.0 - L) * u[j][i] + L * (u[j][i + 1] + u[j][i - 1]) - u[j - 1][i];

for (j = 0; j <= m; j++) { // Печать результатов for (i = 0; i <= n; i++) printf("%6.3f ", u[j][i]); putchar('\n'); }

Page 15: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Новое значение u[j + 1][i] зависит от значений u[j][i - 1], u[j][i], u[j][i + 1] и u[j - 1][i]:

15

Параллельный алгоритм моделирования вибрации струны

u[j+1][i]

u[j][i+1] u[j][i-1]

u[j-1][i]

u[j][i]

Вычисление смещения в конкретной точке для различных моментов времени полностью последовательно: u[j + 1][i] зависит от u[j][i] и u[j - 1][i].

Поэтому декомпозицию для распараллеливания необходимо выполнять по пространству.

Page 16: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Разобьём n интервалов струны между p процессами, каждый получит n / p элементов.

Любой процесс на очередном временном шаге вычисляет значения n / p элементов, при этом все значения, кроме крайних элементов, он может рассчитать самостоятельно, а для крайних (отмечены цветом) необходимо получить значения от соседних процессов (помечены пунктиром):

16

Процесс k

j + 1

j

j - 1

...

i i + 1 ... k * n / p

Т.о., схема взаимодействия процесов:

Процесс k

...

i i + 1 ... k * n / p

Процесс k – 1

j + 1

j

j - 1

Процесс k + 1

Параллельный алгоритм моделирования вибрации струны

Page 17: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Т.о., схема взаимодействия процесов:

17

Процесс k

...

i i + 1 ... k * n / p

Процесс k – 1

j + 1

j

j - 1

Процесс k + 1

Параллельный алгоритм моделирования вибрации струны

Для удобства программирования рекомендуется ввести дополнительный столбец для обмена граничными элементами:

Процесс k

...

Процесс k – 1 Процесс k + 1

...... ...

Page 18: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Для сокращения количества обменов на каждой итерации рассчитывается сразу несколько временных шагов. При этом передаётся сразу несколько элементов

18

Параллельный алгоритм моделирования вибрации струны

Процесс k

j + 1

j

j - 1

Процесс k + 1

... ...

Процесс k

j + 1

j

j - 1

Процесс k + 1

... ...

j + 2

j + 1

j

j - 1

Процесс k + 1

j + 2

......

j + 3

Процесс k

Передаётся один элемент, рассчитывается один шаг по времени.

Передаётся два элемента, рассчитывается два шага по времени, один элемент избыточный.

Передаётся три элемента, рассчитывается три шага по времени, три элемента вычисляются избыточно.

Page 19: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Увеличение граничных элементов (временных шагов, рассчитываемых за одну итерацию) приводит к следующим последствиям:1. Увеличение длины сообщения.2. Уменьшение частоты передачи сообщений (уменьшение латентности).3. Добавление избыточных вычислений.

Рассчитаем количество избыточно вычисленных элементов. Если с каждой стороны области k граничных элементов, тогда сообщение длины k отправляется и присылается от соседних процессов каждые k итераций. Число избыточно рассчитанных элементов:

k – 1 i = k (k – 1) / 2

i = 1График зависимости накладных расходов от числа граничных элементов:

19

Параллельный алгоритм моделирования вибрации струны

Нак

ладн

ые

расх

оды

Число граничных элементов

Увеличение числа граничных элементов позволяет сократить накладные расходы до точки, после которой время выполнения избыточных вычислений станет превышать пользу от сокращения числа информационных обменов.

Page 20: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Задача стационарного распределения тепла

Page 21: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Рассматривается параллельная версия программы определения стационарного распределенгия тепла для тонкой прямоугольной пластины.

Задача стационарного распределения тепла в общем случае описывается уравнением Пуассона:

uxx + uyy = f(x, y), 0 ≤ x ≤ a, 0 ≤ y ≤ b

с заданными граничными условиями (значение функции на границе области):

u(x, 0) = G1(x) и u(x, b) = G2(x) 0 ≤ x ≤ a

u(0, y) = G3(y) и u(a, y) = G4(y) 0 ≤ y ≤ b

Если область прямоугольная, то задача называется задачей Дирихле.

Если функции G1, G2, G3 и G4 непрерывны и функция f непрерывна внутри прямоугольной области, то задача имеет единственное решение.

Для моделирования составим прямоугольную сетку. Каждая точка (xi, yj) этой сетки соответствует конкретной координате (x, y) внутри прямоугольной области.

Моделирование состоит в периодическом вычислении значений во внутренних узлах сетки.

21

Задача стационарного распределения тепла

Page 22: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Для моделирования составим прямоугольную сетку. Каждая точка (xi, yj) этой сетки соответствует конкретной координате (x, y) внутри прямоугольной области.

Моделирование состоит в периодическом вычислении значений во внутренних узлах сетки.

22

G1(x)

G4(x) G2(x)

G1(x)

G4(x) G2(x)

G3(x)G3(x)

(xi, yj)

uxx + uyy = f(x, y)

0 a

b

x

y

Задача стационарного распределения тепла

Page 23: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Разобьём пространственную размерность x на n частей и пространственную размерность y на m частей. Определим h = x / n, k = y / m.

Вычислим приблеженно вторые производные по x и по y:

uxx(xi, yj) ≈ [ u(xi + h, yj) – 2u(xi, yj) + u(xi – h, yj) ] / h2 ≈

≈ [ ui + 1, j – 2ui, j + ui – 1, j ] / h2

uyy(xi, yj) ≈ [ ui, j + 1 – 2ui, j + ui, j – 1] / k2

Подставляя выражения для производных в уравнение Пуассона, получаем:

(ui + 1, j – 2ui, j + ui – 1, j) / h2 + (ui, j + 1 – 2ui, j + ui, j – 1) / k

2 = f(xi, yj)

Положим λ = k / h. После серии элементарных преобразований получаем:

ui, j = [ λ2 (ui + 1, j + ui – 1, j) + ui, j + 1 + ui, j – 1 – k2 fi, j ] / [ 2 (1 + λ2) ]

Теперь рассмотрим конкретную задачу. Необходимо выполнить моделирование для тонкой стальной пластины, с трёх сторон окружённая водяным паром (температура 100°С), а с четвёртой стороны граничащая со льдом (температура 0°С). Сверху и снизу пластины находится изолирующий слой.

Цель моделирования – отыскать стационарное распределение температуры во внутренних точках пластины.

23

Задача стационарного распределения тепла

Page 24: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

Теперь рассмотрим конкретную задачу. Необходимо выполнить моделирование для тонкой стальной пластины, с трёх сторон окружённая водяным паром (температура 100°С), а с четвёртой стороны граничащая со льдом (температура 0°С). Сверху и снизу пластины находится изолирующий слой.

Цель моделирования – отыскать стационарное распределение температуры во внутренних точках пластины.

24

ui + 1, j

ui, j + 1 ui, j – 1

ui – 1, j

ui, j

Поскольку точки распределены равномерно, то h = k и λ = 1.

Поскольку пластина изолирована, тепло не проникает внутрь и распространяется только с границ. Это означает, что fi, j = 0. Поэтому можно записать:

ui, j = (ui + 1, j + ui – 1, j + ui, j + 1 + ui, j – 1) / 4

Начиная с начальных значений, по известным значениям можно рассчитывать все последующие значения wi, j – и так до тех пор, пока значения не будут сходиться. Новое значение ui,j зависит от

четырёх предыдущих ui, j – 1 , ui + 1, j , ui, j + 1 , ui – 1, j

Задача стационарного распределения тепла

Page 25: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

25

Последовательная программа

#include <stdio.h>#include <math.h>

#define N 100#define EPS 0.01

int main(int argc, char *argv[]){ double diff; // Изменение значений int i, j; double mean; // Среднее значение на границах double u[N][N]; // Старые значения double v[N][N]; // Новые значения

// Установить граничные значения и расчитать среднее значение на границах mean = 0.0; for (i = 0; i < N; i++) { u[i][0] = u[i][N - 1] = u[0][i] = 100.0; u[N - 1][i] = 0.0; mean += u[i][0] + u[i][N - 1] + u[0][i] + u[N - 1][i]; } mean /= (4.0 * N); // Проинициализировать внутренние значения for (i = 1; i < N - 1; i++) for (j = 1; j < N - 1; j++) u[i][j] = mean;

Page 26: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

26

Последовательная программа

// Расчитать стационарное состояние for (;;) { diff = 0.0; for (i = 1; i < N - 1; i++) for (j = 1; j < N - 1; j++) { v[i][j] = (u[i - 1][j] + u[i + 1][j] + u[i][j - 1] + u[i][j + 1]) / 4.0;

if (fabs(v[i][j] - u[i][j]) > diff) diff = fabs(v[i][j] - u[i][j]); }

if (diff <= EPS) break;

for (i = 1; i < N - 1; i++) for (j = 1; j < N - 1; j++) u[i][j] = v[i][j]; }

// Распечатать решение for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%6.2f ", u[i][j]); putchar('\n'); }}

u[i + 1] [j]

u[i][j + 1] u[i][j – 1]

u[i – 1][j]

v[i][j]

Page 27: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

27

Последовательная программа

// Расчитать стационарное состояние for (;;) { diff = 0.0; for (i = 1; i < N - 1; i++) for (j = 1; j < N - 1; j++) { v[i][j] = (u[i - 1][j] + u[i + 1][j] + u[i][j - 1] + u[i][j + 1]) / 4.0;

if (fabs(v[i][j] - u[i][j]) > diff) diff = fabs(v[i][j] - u[i][j]); }

if (diff <= EPS) break;

for (i = 1; i < N - 1; i++) for (j = 1; j < N - 1; j++) u[i][j] = v[i][j]; }

// Распечатать решение for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%6.2f ", u[i][j]); putchar('\n'); }}

u[i + 1] [j]

u[i][j + 1] u[i][j – 1]

u[i – 1][j]

v[i][j]

Вычисление новых значений v[i][j] температуры можно выполнять

параллельно!

Вычислительная сложность (для квадратной решётки): T = O(n2)

Page 28: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

28

Параллельный алгоритм

P0

P1

Pp

P0 P1 P2 P3

P4 P5

Pp…

… … … …

… …

P6 P7

Декомпозиция по строкам Декомпозиция по блокам

Page 29: Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)

29

Параллельный алгоритм

Декомпозиция по строкам Декомпозиция по блокам

P0

P1

Pp

P0 P1 P2 P3

P4 P5

Pp…

… … … …

… …

P6 P7

Вычислительная сложность: O(n2 / p)Коммуникационная сложность: O(n)Общее количество пересылаемых

элементов на одной итерации: O(np)

Вычислительная сложность: O( [n / sqrt(p)]2 )Коммуникационная сложность: O(n / sqrt(p))

Общее количество пересылаемых элементов на одной итерации: O(n sqrt(p))