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

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

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

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

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