ЛЕКЦИЯ 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Факторизационные модели в рекомендательных системахromovpa
Факторизационные модели, модели разложения матриц для коллаборативной фильтрации в рекомендательных системах. В презентации рассматриваются теоретические аспекты и алгоритмы.
С доклада на спецсеминаре "Machine Learning & Information Retrieval" в Школе Анализа Данных Яндекса.
Факторизационные модели в рекомендательных системахromovpa
Факторизационные модели, модели разложения матриц для коллаборативной фильтрации в рекомендательных системах. В презентации рассматриваются теоретические аспекты и алгоритмы.
С доклада на спецсеминаре "Machine Learning & Information Retrieval" в Школе Анализа Данных Яндекса.
Рассматривается метод отдельных тел (метод А. Ф. Верещагина) для построения уравнений движения систем тел со структурой дерева. Приводится пример программы моделирования движения цепи n тел на языке MATLAB.
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова. Курс "Алгоритмы интеллектуальной обработки больших объемов данных", Лекция №10 "Алгоритмические композиции. Завершение"
Лектор - Владимир Гулин
Ключевые идеи бустинга. Отличия бустинга и бэггинга. Алгорим AdaBoost. Градиентный бустинг. Мета-алгоритмы над алгоритмическими композициями. Алгоритм BagBoo.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9pyyrqknouMZbIPf4l3CwUP
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова. Курс "Алгоритмы интеллектуальной обработки больших объемов данных", Лекция №9 "Алгоритмические композиции. Начало"
Лектор - Владимир Гулин
Комбинации классификаторов. Модельные деревья решений. Смесь экспертов. Stacking. Стохастические методы построения ансамблей классификаторов. Bagging. RSM. Алгоритм RandomForest.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9pyyrqknouMZbIPf4l3CwUP
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL ModelsIosif Itkin
Tools & Methods of Program Analysis (TMPA-2013)
Ivannikov, V.P., Kamkin, A.S., Chupilko, M.M., Institute for System Programming, ISP RAS
Verification of Correct Behaviour of HDL-Models of Digital Equipment Based on the Dynamic Comparison of Tracks
Учебная компьютерная модель «сложение взаимно перпендикулярных колебаний» 200...Павел Ермолович
Целью данной работы является создание в рамках разработанного физического практикума обучающей программы и моделирование основных процессов колебательных движений .
Для реализации указанной цели необходимо было, на данном этапе, решить ряд задач:
Изучить процессы формирования фигур Лиссажу и выполнить расчеты для различных частотных и амплитудных параметров.
Сложение сложных взаимоперпендикулярных колебаний с различными частотами.
Освоить методику формирования и определения параметров фигур Лиссажу.
Создать программу для наблюдения и исследования фигур Лиссажу.
Найти перспективное применение данной тематики на практике.
Рассматривается метод отдельных тел (метод А. Ф. Верещагина) для построения уравнений движения систем тел со структурой дерева. Приводится пример программы моделирования движения цепи n тел на языке MATLAB.
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова. Курс "Алгоритмы интеллектуальной обработки больших объемов данных", Лекция №10 "Алгоритмические композиции. Завершение"
Лектор - Владимир Гулин
Ключевые идеи бустинга. Отличия бустинга и бэггинга. Алгорим AdaBoost. Градиентный бустинг. Мета-алгоритмы над алгоритмическими композициями. Алгоритм BagBoo.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9pyyrqknouMZbIPf4l3CwUP
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова. Курс "Алгоритмы интеллектуальной обработки больших объемов данных", Лекция №9 "Алгоритмические композиции. Начало"
Лектор - Владимир Гулин
Комбинации классификаторов. Модельные деревья решений. Смесь экспертов. Stacking. Стохастические методы построения ансамблей классификаторов. Bagging. RSM. Алгоритм RandomForest.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9pyyrqknouMZbIPf4l3CwUP
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL ModelsIosif Itkin
Tools & Methods of Program Analysis (TMPA-2013)
Ivannikov, V.P., Kamkin, A.S., Chupilko, M.M., Institute for System Programming, ISP RAS
Verification of Correct Behaviour of HDL-Models of Digital Equipment Based on the Dynamic Comparison of Tracks
Учебная компьютерная модель «сложение взаимно перпендикулярных колебаний» 200...Павел Ермолович
Целью данной работы является создание в рамках разработанного физического практикума обучающей программы и моделирование основных процессов колебательных движений .
Для реализации указанной цели необходимо было, на данном этапе, решить ряд задач:
Изучить процессы формирования фигур Лиссажу и выполнить расчеты для различных частотных и амплитудных параметров.
Сложение сложных взаимоперпендикулярных колебаний с различными частотами.
Освоить методику формирования и определения параметров фигур Лиссажу.
Создать программу для наблюдения и исследования фигур Лиссажу.
Найти перспективное применение данной тематики на практике.
ЛЕКЦИЯ 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллельный ввод-вывод в MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 4. Производные типы данных в стандарте MPIAlexey Paznikov
ЛЕКЦИЯ 4. Производные типы данных в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Alexey Paznikov
ЛЕКЦИЯ 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI умножения матрицы на вектор, метода Монте-Карло, решение линейных алгебраических уравнений (СЛАУ) методами Гаусса и сопряжённых градиентов
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
ЛЕКЦИЯ 2. Коллективные операции в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
ЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
ЛЕКЦИЯ 8. Многопоточное программирование без использования блокировок. Модель потребитель-производитель. Потокобезопасный стек. Проблема ABA. Указатели опасности.
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
ЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
ЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 4. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
ЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 1. Актуальность параллельных вычислений. Анализ параллельных алгоритмов. Многоядерные вычислительные систем с общей памятью
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 0. Описание курса. Общие вопросы, структура курса, требования. Содержание курса. Полезные ресурсы
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 7. Многопоточное программирование без блокировок. Модель потребитель-производитель. Потокобезопасный стек: проблема ABA, указатели опасности, сборщики мусора, счётчик ссылок, применение модели памяти С++.
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
ЛЕКЦИЯ 3. Стандарт POSIX Threads
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
3. 3
Дифференциальные уравнения в частных производных
Обычное дифференциальное уравнение – уравнение, содержащее производные
функций одной переменной.
Дифференциальное уравнение в частных производных (ДУЧП) – уравнение,
содержащее частные производные функции нескольких переменных.
Многие физические явления моделируются с помощью ДУЧП, например:
▪ Обтекание крыла самолёта.
▪ Циркуляция крови в теле человека.
▪ Циркуляция воды в океане.
▪ Деформация моста под действием транспорта.
▪ Моделирование климатических явлений (“прогноз погоды”).
▪ Моделирование стихийных бедствий.
▪ Изменение температуры различных объектов.
▪ и т.д.
Методы решения ДУЧП:
▪ Методы конечных элементов.
▪ Методы конечных разностей.
4. 4
Методы решения ДУЧП:
▪ Методы конечных элементов.
▪ Методы конечных разностей (МКР).
Метод конечных разностей предполагает представления ДУЧП в виде СЛАУ. Матрицы,
полученные в результате этого, разрежены. Поэтому реализации МКР разделяются на
две категории в зависимости от того, как представлены разреженные матрицы.
▪ Матрицы представлены явно, с использованием структур, которые поддерживают
эффективный доступ к ненулевым элементам.
▪ Матрицы представлены неявно.
Дифференциальные уравнения в частных производных
5. 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)
Примеры нелинейных ДУЧП второго порядка:
u2
xx
+ uyy
= 0
uuxy
+ sin(xy)uyy
= x + y
Классификация ДУЧП
6. Линейное ДУЧП представляет собой уравнение следующего вида:
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
– пример параболического ДУЧП. Уравнение
описывает передачу тепла в твёрдых телах. Также этим уравнением описывается
професс диффузии жидкостей и газов (уравнение диффузии).
Волновое уравнение c2
uxx
= utt
– пример гиперболического ДУЧП. Волновое уравнение
позволяет моделировать распространение волны и вибрацию струн и мембран.
6
Классификация линейных ДУЧП
7. Метод конечных разностей приближает решение ДУЧП путем разделения переменных
(по времени и пространству) на дискретные интервалы.
Рассмотрим функцию 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
9. Цель состоит в моделировании вибрации струны (такой, как, например, гитарная).
В частности, требуется определить позицию струны в определённый момент времени на
основе текущей позиции.
▪ Концы струны зафиксированы.
▪ Переменная 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
10. Данная проблема моделируется множеством уравнений.
Первое уравнение – линейное ДУЧП второго порядка, отражает процесс изменения
смещений струны:
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
Данный вид уравнений – частный случай волнового уравнения общего вида:
c2
uxx
= 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
Моделирование вибрации струны
11. Необходимо найти решение задачи для значений 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
Моделирование вибрации струны
14. 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'); }
15. Новое значение 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].
Поэтому декомпозицию для распараллеливания необходимо выполнять
по пространству.
16. Разобьём 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
Параллельный алгоритм моделирования вибрации струны
17. Т.о., схема взаимодействия процесов:
17
Процесс k
...
i i + 1 ... k * n / p
Процесс k – 1
j + 1
j
j - 1
Процесс k + 1
Параллельный алгоритм моделирования вибрации струны
Для удобства программирования рекомендуется ввести дополнительный столбец для
обмена граничными элементами:
Процесс k
...
Процесс k – 1 Процесс k + 1
...... ...
18. Для сокращения количества обменов на каждой итерации рассчитывается сразу несколько
временных шагов. При этом передаётся сразу несколько элементов
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
Передаётся один
элемент,
рассчитывается один
шаг по времени.
Передаётся два
элемента,
рассчитывается два
шага по времени,
один элемент
избыточный.
Передаётся три
элемента,
рассчитывается три
шага по времени, три
элемента
вычисляются
избыточно.
19. Увеличение граничных элементов (временных шагов, рассчитываемых за одну
итерацию) приводит к следующим последствиям:
1. Увеличение длины сообщения.
2. Уменьшение частоты передачи сообщений (уменьшение латентности).
3. Добавление избыточных вычислений.
Рассчитаем количество избыточно вычисленных элементов. Если с каждой стороны
области k граничных элементов, тогда сообщение длины k отправляется и присылается
от соседних процессов каждые k итераций. Число избыточно рассчитанных элементов:
k – 1
i = k (k – 1) / 2
i = 1
График зависимости накладных расходов от числа граничных элементов:
19
Параллельный алгоритм моделирования вибрации струны
∑
Накладныерасходы
Число граничных элементов
Увеличение числа граничных
элементов позволяет сократить
накладные расходы до точки, после
которой время выполнения
избыточных вычислений станет
превышать пользу от сокращения
числа информационных обменов.
21. Рассматривается параллельная версия программы определения стационарного
распределенгия тепла для тонкой прямоугольной пластины.
Задача стационарного распределения тепла в общем случае описывается уравнением
Пуассона:
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
Задача стационарного распределения тепла
22. Для моделирования составим прямоугольную сетку. Каждая точка (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
Задача стационарного распределения тепла
23. Разобьём пространственную размерность 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
) / k2
= 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
Задача стационарного распределения тепла
24. Теперь рассмотрим конкретную задачу. Необходимо выполнить моделирование для
тонкой стальной пластины, с трёх сторон окружённая водяным паром (температура
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
Задача стационарного распределения тепла
25. 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;
26. 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]
27. 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
)