Статья опубликована в рамках: LI Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 30 марта 2017 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
ИССЛЕДОВАНИЕ ВОЗМОЖНОСТИ ПЕРЕДАЧИ СООБЩЕНИЙ МЕЖДУ УЗЛАМИ КОМПЬЮТЕРНОЙ СЕТИ С ПОМОЩЬЮ MPI
В настоящее время сложно представить себе область деятельности человека, не включающую в себя, хоть в малой степени, необходимость обмена информацией по сети. Один из способов обеспечения передачи информации между компьютерами одной сети – использование MPI (Message Passing Interface) – программного интерфейса для передачи информации, позволяющего обмен сообщениями между процессами одного или нескольких узлов сети [2].
В данной работе происходит исследование зависимости времени передачи сообщений между компьютерами при использовании разных способов, предоставляемых MPI.
MPI предоставляет следующие функции для передачи сообщений [1]:
- MPI_Send - функция передачи сообщения между двумя процессами;
- MPI_Bcast - функция широковещательной рассылки данных (процесс-отправитель рассылает сообщение из своего буфера передачи всем процессам области связи коммуникатора);
- MPI_Scatter - функция, разбивающая сообщение из буфера посылки на равные части и посылающая i-ю часть в буфер приема i-го процесса;
- MPI_Gather - функция, производящая сборку блоков данных, посылаемых всеми процессами группы, в один массив процесса с номером указанным в параметрах функции.
В процессе исследования размер передаваемого сообщения варьируется от 0 до нескольких МВ. Также выбраны следующие способы передачи сообщений:
- Send (передача сообщений между двумя узлами);
- Send (передача сообщений между двумя процессами одного узла);
- Bcast (передача сообщений между несколькими узлами);
- Scatter (передача сообщений между несколькими узлами);
- Gather (передача сообщений между несколькими узлами).
Для способов 3,4 и 5 количество узлов изменяется от 2 до 4.
Время выполнения вариантов 1 и 2 сравнивается со временем копирования сообщения, а способов 3, 4 и 5 - со временем выполнения Send в цикле for.
Результирующие таблицы и соответствующий им графики будут иметь следующий вид:
Таблица 1.
Результаты измерений времени передачи сообщений функцией Send (способ 1 и 2).
Объем данных в МВ |
0 |
1,90735 |
3,81470 |
5,72205 |
7,62940 |
9,536743 |
Длина массива |
0 |
500000 |
1000000 |
1500000 |
2000000 |
2500000 |
передача на одном узле |
26*10-7 |
0,00166 |
0,00329 |
0,00489 |
0,00667 |
0,008152 |
передача на двух узлах |
282*10-7 |
0,22692 |
0,40876 |
0,61160 |
0,83175 |
1,020722 |
копирование |
2*10-7 |
0,00168 |
0,00325 |
0,00474 |
0,00637 |
0,008099 |
Рисунок 1. График зависимости времени передачи сообщения от объема данных.
Таблица 2.
Результаты измерений времени передачи сообщений функцией Bcast (способ 3).
Объем данных в МВ |
0 |
1,907349 |
3,814697 |
5,722046 |
7,629395 |
9,536743 |
Длина массива |
0 |
500000 |
1000000 |
1500000 |
2000000 |
2500000 |
количество узлов - 2 |
0,0000005 |
0,225822 |
0,427993 |
0,639329 |
0,871031 |
1,070251 |
количество узлов - 3 |
0,0000005 |
0,506295 |
1,020999 |
1,560224 |
2,033362 |
2,572404 |
количество узлов - 4 |
0,0000005 |
0,468035 |
0,870301 |
1,293671 |
1,612451 |
2,208533 |
Рисунок 2. График зависимости времени передачи сообщения от объема данных и количества узлов.
Таблица 3.
Сравнение результаты измерений времени передачи сообщений функцией Bcast (способ 3) со временем выполнения Send в цикле for.
Объем данных в МВ |
0 |
1,90735 |
3,81470 |
5,722046 |
7,629395 |
9,536743 |
Длина массива |
0 |
500000 |
1000000 |
1500000 |
2000000 |
2500000 |
Bcast 2 |
0,0000005 |
0,22582 |
0,42799 |
0,63933 |
0,87103 |
1,07025 |
Bcast 3 |
0,0000005 |
0,50629 |
1,02099 |
1,56022 |
2,03336 |
2,57240 |
Bcast 4 |
0,0000005 |
0,46804 |
0,87030 |
1,29367 |
1,61245 |
2,20853 |
For Send 2 |
0,000015 |
0,23187 |
0,37542 |
0,6223 |
0,91784 |
1,03596 |
For Send 3 |
0,000028 |
0,46773 |
0,88872 |
1,32622 |
1,87603 |
2,12046 |
For Send 4 |
0,002322 |
0,77403 |
1,21495 |
1,94917 |
2,49094 |
3,20553 |
Таблица 4.
Результаты измерений времени передачи сообщений функцией Scatter (способ 4) и сравнение со временем выполнения Send в цикле for.
Объем данных в МВ |
0 |
1,90735 |
3,81470 |
5,72205 |
7,62940 |
9,53674 |
Длина массива |
0 |
500000 |
1000000 |
1500000 |
2000000 |
2500000 |
Scatter 2 |
0,000022 |
0,09107 |
0,20014 |
0,29991 |
0,39540 |
0,53704 |
Scatter 3 |
0,000037 |
0,14653 |
0,28581 |
0,41819 |
0,55295 |
0,71734 |
Scatter 4 |
0,000030 |
0,15928 |
0,32267 |
0,48977 |
0,65959 |
0,81312 |
For Send 2 |
0,000013 |
0,10806 |
0,20681 |
0,32436 |
0,43856 |
0,53946 |
For Send 3 |
0,000027 |
0,14550 |
0,30395 |
0,42761 |
0,56355 |
0,70904 |
For Send 4 |
0,000283 |
0,179344 |
0,341004 |
0,507451 |
0,652628 |
0,825418 |
Рисунок 3. График зависимости времени передачи сообщения от объема данных и используемой функции для 2 узлов.
Таблица 5.
Результаты измерений времени передачи сообщений функцией Gather (способ 5) и сравнение со временем выполнения Send в цикле for.
Объем в МВ |
0 |
1,90735 |
3,81470 |
5,72205 |
7,62940 |
9,53674 |
Длина массива |
0 |
500000 |
1000000 |
1500000 |
2000000 |
2500000 |
Gather 2 |
0,000145 |
0,11067 |
0,20014 |
0,31001 |
0,40868 |
0,55197 |
Gather 3 |
0,000172 |
0,15381 |
0,27414 |
0,42541 |
0,57847 |
0,72735 |
Gather 4 |
0,000298 |
0,17376 |
0,31892 |
0,48113 |
0,64099 |
0,80066 |
For Send 2 |
0,000013 |
0,10806 |
0,20681 |
0,32436 |
0,43856 |
0,53946 |
For Send 3 |
0,0000274 |
0,14550 |
0,30395 |
0,42761 |
0,56355 |
0,70904 |
For Send 4 |
0,000283 |
0,17934 |
0,341004 |
0,507451 |
0,652628 |
0,825418 |
Рисунок 4. График зависимости времени передачи сообщения от объема данных и используемой функции для 4 узлов.
Как видно из приведенных выше рисунка 1 и таблицы 1 (для способов 1 и 2), при увеличении объема передаваемого сообщения растет и время его передачи, однако в случае передачи между двумя узлами время растет намного быстрее, чем в случае передачи между процессами одного узла или копировании.
Из таблиц 2 и 3, а так же рисунка 2, можно видеть, что выполнение функции Bcast для 3 узлов превышает по времени выполнение для 4 узлов; время выполнения Send в цикле for растет вместе с увеличением количества узлов, и при этом время пересылки сообщений с помощью Send для 4 узлов больше, чем время выполнения функции Bcast для того же количества узлов.
Из таблиц 4 и 5, и рисунков 3и 4 (способ 4 и 5) можно сделать вывод, что вне зависимости от количества узлов, вместе с увеличением объема передаваемого сообщения растет и время его передачи. При этом время выполнения функций Scatter и Send в цикле for практически одинаково, что позволяет менять одну функцию на другую без потерь времени.
Список литературы:
- Дацюк В.Н., Букатов А.А., Жегуло А.И. Методическое пособие по курсу "Многопроцессорные системы и параллельное программирование" [Электронный ресурс] / Режим доступа. — URL: http://rsusu1.rnd.runnet.ru/tutor/method/index.html (дата обращения 20.03.2017)
- Message Passing Interface [Электронный ресурс] / Режим доступа. — URL: https://ru.wikipedia.org/wiki/Message_Passing_Interface (дата обращения 20.03.2017)
дипломов
Оставить комментарий