Редактирование: Численные эксперименты с параллельным программированием. Шубин Андрей. 6 курс

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
==Цель работы==
 
==Цель работы==
 
Наибольший интерес при применении технологии параллельных вычислений в решении различного рода задач представляет наблюдение и анализ убывания времени расчета при увеличении числа процессов. Зная эту характеристику можно определить, какой из различных методов решения задачи будет предпочтительней при заданных условиях.
 
Наибольший интерес при применении технологии параллельных вычислений в решении различного рода задач представляет наблюдение и анализ убывания времени расчета при увеличении числа процессов. Зная эту характеристику можно определить, какой из различных методов решения задачи будет предпочтительней при заданных условиях.
Основной целью данной работы стало параллельное вычисление двойного интеграла для произвольной функции и исследование сходимости точности и времени вычислений в зависимости от числа процессов, как пример использования средств параллельного программирования на основе MPI, а также вычисление числа пи как площадь единичной окружности тем же методом.
+
Основной целью данной работы стало параллельное вычисление двойного интеграла для произвольной функции и исследование сходимости точности и времени вычислений в зависимости от числа процессов, как пример использования средств параллельного програмирования на основе MPI, а также вычисление числа пи как площадь единичной окружности тем же методом.
 
==Метод исследования==
 
==Метод исследования==
 
Параллельное программирование служит для создания программ, эффективно использующих вычислительные ресурсы за счет одновременного исполнения кода на нескольких вычислительных узлах. Для создания параллельных приложений используются параллельные языки программирования и специализированные системы поддержки параллельного программирования, такие как MPI - библиотека передачи сообщений, собрание функций на C/C++, облегчающих коммуникацию (обмен данными и синхронизацию задач) между процессами параллельной программы с распределенной памятью. Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов. Все процессы порождаются один раз, образуя параллельную часть программы. Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в MPI нет. Процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени).
 
Параллельное программирование служит для создания программ, эффективно использующих вычислительные ресурсы за счет одновременного исполнения кода на нескольких вычислительных узлах. Для создания параллельных приложений используются параллельные языки программирования и специализированные системы поддержки параллельного программирования, такие как MPI - библиотека передачи сообщений, собрание функций на C/C++, облегчающих коммуникацию (обмен данными и синхронизацию задач) между процессами параллельной программы с распределенной памятью. Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов. Все процессы порождаются один раз, образуя параллельную часть программы. Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в MPI нет. Процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени).
 
==Решение задачи==
 
==Решение задачи==
[[File:MPI2.gif|400px]]<br>
+
Для тестирования метода параллельного вычисления был взят двойной интеграл для функции <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)]. При расчете указанного интеграла используется метод прямоугольников для двумерной задачи, изображение метода можно увидеть на gif-изображениях.
+
Отрезок [0..1] разбивается на заданное количество интервалов: N = 1000, 5000 и 10000. Заданное количество интервалов распределяется между определенным количеством процессов. На каждом полученном таким способом интервале процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы соседние процессы должны обмениваться крайними значениями, полученными на предыдущем шаге, для выполнения следующего шага. Суммируя результаты, полученные каждым отдельным процессом, мы получаем конечный результат.
Отрезок [0..1] разбивается на заданное количество интервалов: N = 1000, 5000 и 10000. Заданное количество интервалов распределяется между определенным количеством процессов. На каждом полученном таким способом интервале процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы соседние процессы должны обмениваться крайними значениями, полученными на предыдущем шаге, для выполнения следующего шага. Суммируя результаты, полученные каждым отдельным процессом, мы получаем конечный результат.<br>
 
[[File:MPI1.gif|400px]]<br>
 
 
Универсальность программного кода позволила тем же методом вычислить число пи как площадь единичной окружности.<br>
 
Универсальность программного кода позволила тем же методом вычислить число пи как площадь единичной окружности.<br>
Код программы:[[:File:MPI_experiments.rar| программа]]
+
Код программы:[[Медиа:Integral_Frolova.7z| программа]]
(Закомментировав 9,14,15,16 строку кода и раскомментировав 10,17,18,19 строку соответственно, можно получить вторую часть программы.)
 
 
==Результаты==
 
==Результаты==
'''Вычислен определенный интеграл <math>\int_0^1 \int_0^1 cos^3(xy)*sin^2(x)dxdy</math>.'''
+
Вычислен определенный интеграл <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]
 +
!Результат [-]
 +
!Абсолютная ошибка [-]
 
|-
 
|-
! Количество процессоров [pcs] !! Вчера вычисления [sec] !! Результат [-] !! Абсолютная ошибка [-]
+
|1  
|-
+
|18.348
| 1 || 0.186 || 0.2104277 || -1.48E-04
+
|0.2105614
|-
+
|-1.46E-05
| 2 || 0.093 || 0.2104277 || -1.48E-04
+
|2
|-
+
|9.305
| 4 || 0.053 || 0.2104277 || -1.48E-04
+
|0.2105614
|-
+
|-1.46E-05
| 8 || 0.033 || 0.2104277 || -1.48E-04
+
|4
|-
+
|4.905
| 16 || 0.077 || 0.2067926 || -3.78E-03
+
|0.2105614
|}
+
|-1.46E-05
При числе разбиений N = 5000:
+
|8
{| class="wikitable"
+
|2.869
|-
+
|0.2105614
! Количество процессоров [pcs] !! Вчера вычисления [sec] !! Результат [-] !! Абсолютная ошибка [-]
+
|-1.46E-05
|-
+
|16
| 1 || 4.612 || 0.2105466 || -2.94E-05
+
|14.258
|-
+
|0.2105614
| 2 || 2.321 || 0.2105466 || -2.94E-05
+
|-1.46E-05
|-
 
| 4 || 1.231 || 0.2105466 || -2.94E-05
 
|-
 
| 8 || 0.724 || 0.2105466 || -2.94E-05
 
|-
 
| 16 || 3.487 || 0.2098185 || -7.57E-04
 
|}
 
При числе разбиений N = 10000:
 
{| class="wikitable"
 
|-
 
! Количество процессоров [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
 
|}
 
'''Вычислено число пи как площадь единичной окружности тем же методом.'''<br>
 
При числе разбиений N=1000:
 
{| class="wikitable"
 
|-
 
! Количество процессоров [pcs] !! Вчера вычисления [sec] !! Результат [-] !! Абсолютная ошибка [-]
 
|-
 
| 1 || 0.029 || 3.141300 || -2.93E-04
 
|-
 
| 2 || 0.014 || 3.141300 || -2.93E-04
 
|-
 
| 4 || 0.010 || 3.141300 || -2.93E-04
 
|-
 
| 8 || 0.008 || 3.141300 || -2.93E-04
 
|-
 
| 16 || 0.006 || 3.137100 || -4.41E-03
 
|}
 
При числе разбиений N=5000:
 
{| class="wikitable"
 
|-
 
! Количество процессоров [pcs] !! Вчера вычисления [sec] !! Результат [-] !! Абсолютная ошибка [-]
 
|-
 
| 1 || 0.698 || 3.141564 || -2.87E-05
 
|-
 
| 2 || 0.353 || 3.141564 || -2.87E-05
 
|-
 
| 4 || 0.213 || 3.141564 || -2.87E-05
 
|-
 
| 8 || 0.148 || 3.141564 || -2.87E-05
 
|-
 
| 16 || 0.65 || 3.141195 || -3.97E-04
 
|}
 
При числе разбиений N=10000:
 
{| class="wikitable"
 
|-
 
! Количество процессоров [pcs] !! Вчера вычисления [sec] !! Результат [-] !! Абсолютная ошибка [-]
 
|-
 
| 1 || 2.787 || 3.141586 || -6.77E-06
 
|-
 
| 2 || 1.457 || 3.141586 || -6.77E-06
 
|-
 
| 4 || 0.824 || 3.141586 || -6.77E-06
 
|-
 
| 8 || 0.587 || 3.141586 || -6.77E-06
 
|-
 
| 16 || 0.580 || 3.141586 || -6.77E-06
 
 
|}
 
|}
 +
<gallery widths=356px heights=233px perrow = 1>
 +
Файл:Plot_x_2.jpg
 +
</gallery>
 +
Показано, что при увеличении количества процессов уменьшается время расчета. Также из приведенного графика видно, что для малого числа узлов в сетке использование большого количества процессов не обосновано - выигрыш во времени либо незначителен, либо же затраченное время увеличивается.
 
==Выводы==
 
==Выводы==
Исходя из полученных результатов, можно сделать следующие выводы:
 
*Для 1-8 процессоров распараллеливание задачи выполнено идеально по результату и по погрешности.
 
*Время расчета уменьшается, но не кратно количеству процессоров, что указывает на недостатки метода.
 
*При увеличении количества разбиений точность увеличивается, как и время расчета.
 
*Для 16 процессоров в некоторых случаях видно увеличение время расчета и ошибки, можно сделать вывод, что для каждой задачи необходим отдельный выбор оптимального количества процессоров.
 
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)