Текущая версия |
Ваш текст |
Строка 139: |
Строка 139: |
| </div> | | </div> |
| | | |
− | Результат работы программы (N = 100, t = 500, dt = 0.01):
| + | == Сравнение скорости работы программы == |
| + | N = 20000; |
| + | t = 200; |
| + | dt = 0.01; |
| | | |
− | [[Файл: Rez mpi.png]]
| + | Ноутбук, двухядерный процессор (Intel Core i5-3317U CPU 1.70 GHz) |
− | == Реализация распараллеливания ==
| |
− | Для того, чтобы каждый процесс мог производить вычисления параллельно другим процессам, стержень (состоящий из N частиц) делится на количество процессов. Каждый шаг вычисления процессы обмениваются данными о том, что происходит на границах вычисляемого ими участка стержня с помощью функций отправки (''MPI_Send'') и приема (''MPI_Recv'') данных.
| |
− | | |
− | После окончания вычислений каждый процесс имеет у себя участок памяти с результатами вычислений принадлежащего процессу участка стержня. Для объединения этих данных используется функция ''MPI_Gather'', принцип работы данной функции отображен на рисунке ниже.
| |
− | | |
− | [[Файл: Image003.jpg]]
| |
− | | |
− | После сбора данных многопроцессорного вычисления они выводятся вместе с данными, вычисленными с помощью одного процесса, в сравнительной таблице.
| |
− | | |
− | Чтобы сбор и вывод данных управляющим процессом (''root''-процессом) не начался до того, как остальные процессы завершат свои вычисления, используется функция барьерной синхронизации ''MPI_Barrier'', которая блокирует работу вызвавшего ее процесса до тех пор, пока все другие процессы группы также не вызовут эту функцию. Завершение работы этой функции возможно только всеми процессами одновременно.
| |
− | | |
− | Для правильного расчета требуется, чтобы N - 2 было кратно количеству процессов (например, при 16 процессах можно использовать N = 32000 + 2).
| |
− | | |
− | == Сравнение времени работы программы ==
| |
− | | |
− | Время работы программы:
| |
− | {| 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
| |
− | |-
| |
− | |}
| |
− | | |
− | | |
− | График времени работы программы в зависимости от количества задействованных ядер суперкомпьютера:
| |
− | | |
− | [[Файл: T Nproc.png]]
| |