Редактирование: Численные эксперименты с параллельным программированием. Шубин Андрей. 6 курс
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
==Цель работы== | ==Цель работы== | ||
Наибольший интерес при применении технологии параллельных вычислений в решении различного рода задач представляет наблюдение и анализ убывания времени расчета при увеличении числа процессов. Зная эту характеристику можно определить, какой из различных методов решения задачи будет предпочтительней при заданных условиях. | Наибольший интерес при применении технологии параллельных вычислений в решении различного рода задач представляет наблюдение и анализ убывания времени расчета при увеличении числа процессов. Зная эту характеристику можно определить, какой из различных методов решения задачи будет предпочтительней при заданных условиях. | ||
− | Основной целью данной работы стало параллельное вычисление двойного интеграла для произвольной функции и исследование сходимости точности и времени вычислений в зависимости от числа процессов, как пример использования средств параллельного | + | Основной целью данной работы стало параллельное вычисление двойного интеграла для произвольной функции и исследование сходимости точности и времени вычислений в зависимости от числа процессов, как пример использования средств параллельного програмирования на основе MPI, а также вычисление числа пи как площадь единичной окружности тем же методом. |
==Метод исследования== | ==Метод исследования== | ||
Параллельное программирование служит для создания программ, эффективно использующих вычислительные ресурсы за счет одновременного исполнения кода на нескольких вычислительных узлах. Для создания параллельных приложений используются параллельные языки программирования и специализированные системы поддержки параллельного программирования, такие как MPI - библиотека передачи сообщений, собрание функций на C/C++, облегчающих коммуникацию (обмен данными и синхронизацию задач) между процессами параллельной программы с распределенной памятью. Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов. Все процессы порождаются один раз, образуя параллельную часть программы. Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в MPI нет. Процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени). | Параллельное программирование служит для создания программ, эффективно использующих вычислительные ресурсы за счет одновременного исполнения кода на нескольких вычислительных узлах. Для создания параллельных приложений используются параллельные языки программирования и специализированные системы поддержки параллельного программирования, такие как MPI - библиотека передачи сообщений, собрание функций на C/C++, облегчающих коммуникацию (обмен данными и синхронизацию задач) между процессами параллельной программы с распределенной памятью. Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов. Все процессы порождаются один раз, образуя параллельную часть программы. Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в MPI нет. Процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени). | ||
==Решение задачи== | ==Решение задачи== | ||
− | + | Для тестирования метода параллельного вычисления был взят двойной интеграл для функции <math>\int_0^1 \int_0^1 cos^3(xy)*sin^2(x)dxdy</math> заключенный в квадрат [(0,1);(0,1)]. При расчете указанного интеграла используется метод прямоугольников для двумерной задачи, изображение метода можно увидеть на рисунке 1. | |
− | Для тестирования метода параллельного вычисления был взят двойной интеграл для функции <math>\int_0^1 \int_0^1 cos^3(xy)*sin^2(x)dxdy</math> заключенный в квадрат [(0,1);(0,1)]. При расчете указанного интеграла используется метод прямоугольников для двумерной задачи, изображение метода можно увидеть на | + | Отрезок [0..1] разбивается на заданное количество интервалов: N = 1000, 5000 и 10000. Заданное количество интервалов распределяется между определенным количеством процессов. На каждом полученном таким способом интервале процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы соседние процессы должны обмениваться крайними значениями, полученными на предыдущем шаге, для выполнения следующего шага. Суммируя результаты, полученные каждым отдельным процессом, мы получаем конечный результат. |
− | Отрезок [0..1] разбивается на заданное количество интервалов: N = 1000, 5000 и 10000. Заданное количество интервалов распределяется между определенным количеством процессов. На каждом полученном таким способом интервале процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы соседние процессы должны обмениваться крайними значениями, полученными на предыдущем шаге, для выполнения следующего шага. Суммируя результаты, полученные каждым отдельным процессом, мы получаем конечный результат. | ||
− | |||
Универсальность программного кода позволила тем же методом вычислить число пи как площадь единичной окружности.<br> | Универсальность программного кода позволила тем же методом вычислить число пи как площадь единичной окружности.<br> | ||
− | Код программы:[[: | + | Код программы:[[Медиа:Integral_Frolova.7z| программа]] |
− | |||
==Результаты== | ==Результаты== | ||
− | + | Вычислен определенный интеграл <math>\int_0^1 \int_0^1 cos^3(xy)*sin^2(x)dxdy</math>.<br> | |
− | <br>При числе разбиений N = 1000: | + | При числе разбиений N = 1000:<br> |
− | {| class="wikitable" | + | {| class="wikitable" width="300" floating="center" |
+ | !Количество процессоров [pcs] | ||
+ | !Время рассчета [sec] | ||
+ | !Результат [-] | ||
+ | !Абсолютная ошибка [-] | ||
|- | |- | ||
− | + | |1 | |
− | + | |18.348 | |
− | + | |0.2105614 | |
− | + | |-1.46E-05 | |
− | + | |2 | |
− | + | |9.305 | |
− | + | |0.2105614 | |
− | + | |-1.46E-05 | |
− | + | |4 | |
− | + | |4.905 | |
− | + | |0.2105614 | |
− | + | |-1.46E-05 | |
− | + | |8 | |
− | + | |2.869 | |
− | + | |0.2105614 | |
− | + | |-1.46E-05 | |
− | + | |16 | |
− | + | |14.258 | |
− | + | |0.2105614 | |
− | + | |-1.46E-05 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | |||
− | | | ||
− | |||
− | | | ||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <gallery widths=356px heights=233px perrow = 1> | ||
+ | Файл:Plot_x_2.jpg | ||
+ | </gallery> | ||
+ | Показано, что при увеличении количества процессов уменьшается время расчета. Также из приведенного графика видно, что для малого числа узлов в сетке использование большого количества процессов не обосновано - выигрыш во времени либо незначителен, либо же затраченное время увеличивается. | ||
==Выводы== | ==Выводы== | ||
− | |||
− | |||
− | |||
− | |||
− |