Редактирование: MPI решение волнового уравнения

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 139: Строка 139:
 
</div>
 
</div>
  
Результат работы программы (N = 100, t = 500, dt = 0.01):
+
== Сравнение времени работы программы ==
  
[[Файл: Rez mpi.png]]
+
Начальные параметры:
== Реализация распараллеливания ==
+
{| border=1 style="text-align:center"
Для того, чтобы каждый процесс мог производить вычисления параллельно другим процессам, стержень (состоящий из N частиц) делится на количество процессов. Каждый шаг вычисления процессы обмениваются данными о том, что происходит на границах вычисляемого ими участка стержня с помощью функций отправки (''MPI_Send'') и приема (''MPI_Recv'') данных.
+
!bgcolor=#DDDDDD|N
 
+
!bgcolor=#DDDDDD|t
После окончания вычислений каждый процесс имеет у себя участок памяти с результатами вычислений принадлежащего процессу участка стержня. Для объединения этих данных используется функция ''MPI_Gather'', принцип работы данной функции отображен на рисунке ниже.
+
!bgcolor=#DDDDDD|dt
 
+
|-
[[Файл: Image003.jpg]]
+
|20000
 
+
|500
После сбора данных многопроцессорного вычисления они выводятся вместе с данными, вычисленными с помощью одного процесса, в сравнительной таблице.
+
|0.01
 
+
|-
Чтобы сбор и вывод данных управляющим процессом (''root''-процессом) не начался до того, как остальные процессы завершат свои вычисления, используется функция барьерной синхронизации ''MPI_Barrier'', которая блокирует работу вызвавшего ее процесса до тех пор, пока все другие процессы группы также не вызовут эту функцию. Завершение работы этой функции возможно только всеми процессами одновременно.
+
|}
 
 
Для правильного расчета требуется, чтобы N - 2 было кратно количеству процессов (например, при 16 процессах можно использовать N = 32000 + 2).
 
 
 
== Сравнение времени работы программы ==
 
  
 
Время работы программы:
 
Время работы программы:
 
{| border=1 style="text-align:center"
 
{| border=1 style="text-align:center"
!bgcolor=#DDDDDD rowspan="2"|Процессор
+
|
!bgcolor=#DDDDDD colspan="2"|Время, затраченное на частицу за шаг, нс
+
!bgcolor=#DDDDDD|1 процессор
!bgcolor=#DDDDDD rowspan="2"|~Ускорение, %
 
|-
 
!bgcolor=#DDDDDD|1 процесс
 
 
!bgcolor=#DDDDDD|MPI
 
!bgcolor=#DDDDDD|MPI
 +
!bgcolor=#DDDDDD|~Ускорение, %
 
|-
 
|-
 
!bgcolor=#DDDDDD|Intel Core i5-3317U CPU 1.70 GHz, 2 ядра
 
!bgcolor=#DDDDDD|Intel Core i5-3317U CPU 1.70 GHz, 2 ядра
|8.41
+
|8.409 с
|4.99
+
|4.986 с
!bgcolor=#FFFFBB|69
+
|69
|-
 
!bgcolor=#DDDDDD|Суперкомпьютер, 48 ядер
 
|3.02
 
|0.131
 
!bgcolor=#FFFFBB|2205
 
 
|-
 
|-
 
|}
 
|}
 
 
График времени работы программы в зависимости от количества задействованных ядер суперкомпьютера:
 
 
[[Файл: T Nproc.png]]
 
Вам запрещено изменять защиту статьи. 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:

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